nfa_api.h revision 67aef6c6c6f6bc7b8364b97949e874b9dc7175bc
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                                        */
83typedef UINT8 tNFA_STATUS;
84
85/* Handle for NFA registrations and connections */
86typedef 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 */
104typedef 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   */
116typedef 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
129typedef 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         */
137typedef 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
167typedef UINT8 tNFA_RW_NDEF_FLAG;
168
169/* Data for NFA_DM_SET_CONFIG_EVT */
170typedef 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 */
178typedef 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
188typedef UINT8 tNFA_DM_PWR_MODE;
189
190/* Data for NFA_DM_PWR_MODE_CHANGE_EVT */
191typedef 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
201typedef 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 */
208typedef 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 */
219typedef 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#define NFA_LISTEN_ENABLED_EVT                  36  /* Listening enabled event                      */
260#define NFA_LISTEN_DISABLED_EVT                 37  /* Listening disabled event                     */
261#define NFA_P2P_PAUSED_EVT                      38  /* P2P services paused event                    */
262#define NFA_P2P_RESUMED_EVT                     39  /* P2P services resumed event                   */
263
264/* NFC deactivation type */
265#define NFA_DEACTIVATE_TYPE_IDLE        NFC_DEACTIVATE_TYPE_IDLE
266#define NFA_DEACTIVATE_TYPE_SLEEP       NFC_DEACTIVATE_TYPE_SLEEP
267#define NFA_DEACTIVATE_TYPE_DISCOVERY   NFC_DEACTIVATE_TYPE_DISCOVERY
268
269typedef UINT8   tNFA_DEACTIVATE_TYPE;
270
271/* Data for NFA_DISC_RESULT_EVT */
272typedef struct
273{
274    tNFA_STATUS	        status;         /* NFA_STATUS_OK if successful       */
275    tNFC_RESULT_DEVT    discovery_ntf;  /* RF discovery notification details */
276} tNFA_DISC_RESULT;
277
278/* Data for NFA_ACTIVATED_EVT */
279typedef struct
280{
281    UINT8               hr[NFA_T1T_HR_LEN];       /* HR of Type 1 tag         */
282    UINT8               uid[NFA_T1T_CMD_UID_LEN]; /* UID used in T1T Commands */
283} tNFA_T1T_PARAMS;
284
285typedef struct
286{
287    UINT8               uid[NFA_MAX_UID_LEN];     /* UID of T2T tag           */
288} tNFA_T2T_PARAMS;
289
290typedef struct
291{
292    UINT8               num_system_codes;       /* Number of system codes supporte by tag   */
293    UINT16              *p_system_codes;        /* Pointer to list of system codes          */
294} tNFA_T3T_PARAMS;
295
296typedef struct
297{
298    UINT8               uid[I93_UID_BYTE_LEN];  /* UID[0]:MSB, ... UID[7]:LSB                   */
299    UINT8               info_flags;             /* information flags                            */
300    UINT8               dsfid;                  /* DSFID if I93_INFO_FLAG_DSFID                 */
301    UINT8               afi;                    /* AFI if I93_INFO_FLAG_AFI                     */
302    UINT16              num_block;              /* number of blocks if I93_INFO_FLAG_MEM_SIZE   */
303    UINT8               block_size;             /* block size in byte if I93_INFO_FLAG_MEM_SIZE */
304    UINT8               IC_reference;           /* IC Reference if I93_INFO_FLAG_IC_REF         */
305} tNFA_I93_PARAMS;
306
307typedef union
308{
309    tNFA_T1T_PARAMS     t1t;            /* HR and UID of T1T                */
310    tNFA_T2T_PARAMS     t2t;            /* UID of T2T                       */
311    tNFA_T3T_PARAMS     t3t;            /* System codes                     */
312    tNFA_I93_PARAMS     i93;            /* System Information of ISO 15693  */
313} tNFA_TAG_PARAMS;
314
315typedef struct
316{
317    tNFC_ACTIVATE_DEVT  activate_ntf;   /* RF discovery activation details */
318    tNFA_TAG_PARAMS     params;         /* additional informaiton of tag   */
319} tNFA_ACTIVATED;
320
321/* Data for NFA_DEACTIVATED_EVT */
322typedef struct
323{
324    tNFA_DEACTIVATE_TYPE type;          /* NFA_DEACTIVATE_TYPE_IDLE or NFA_DEACTIVATE_TYPE_SLEEP */
325} tNFA_DEACTIVATED;
326
327/* Structure for NFA_NDEF_DETECT_EVT event data */
328typedef struct
329{
330    tNFA_STATUS         status;             /* Status of the ndef detecton                              */
331    tNFA_NFC_PROTOCOL   protocol;           /* protocol used to detect NDEF                             */
332    UINT32              max_size;           /* max number of bytes available for NDEF data              */
333    UINT32              cur_size;           /* current size of stored NDEF data (in bytes)              */
334    tNFA_RW_NDEF_FLAG   flags;              /* Flags to indicate NDEF capability, is formated, soft/hard lockable, formatable, otp and read only */
335} tNFA_NDEF_DETECT;
336
337
338/* Structure for NFA_TLV_DETECT_EVT event data */
339typedef struct
340{
341    tNFA_STATUS         status;     /* Status of the tlv detecton        */
342    tNFA_NFC_PROTOCOL   protocol;   /* protocol used to detect TLV       */
343    UINT8               num_tlvs;   /* number of tlvs present in the tag */
344    UINT8               num_bytes;  /* number of lock/reserved bytes     */
345} tNFA_TLV_DETECT;
346
347/* Structure for NFA_DATA_EVT data */
348typedef struct
349{
350    UINT8               *p_data;        /* Data buffer                      */
351    UINT16              len;            /* Length of data                   */
352} tNFA_RX_DATA;
353
354/* Structure for NFA_CE_NDEF_WRITE_CPLT_EVT data */
355typedef struct
356{
357    tNFA_STATUS         status;         /* Status of the ndef write op      */
358    UINT32              len;            /* Update length of NDEF data       */
359    UINT8               *p_data;        /* data buffer                      */
360} tNFA_CE_NDEF_WRITE_CPLT;
361
362/* Data for NFA_LLCP_ACTIVATED_EVT */
363typedef struct
364{
365    BOOLEAN             is_initiator;   /* TRUE if initiator                */
366    UINT16              remote_wks;     /* Well-Known service mask of peer  */
367    UINT8               remote_lsc;     /* Link Service Class of peer       */
368    UINT16              remote_link_miu;/* Link MIU of peer                 */
369    UINT16              local_link_miu; /* Link MIU of local                */
370} tNFA_LLCP_ACTIVATED;
371
372/* Data for NFA_LLCP_DEACTIVATED_EVT */
373typedef struct
374{
375    UINT8               reason;         /* reason of deactivation           */
376} tNFA_LLCP_DEACTIVATED;
377
378/* Data for NFA_I93_CMD_CPLT_EVT */
379typedef struct
380{
381    UINT8           dsfid;                  /* DSFID                       */
382    UINT8           uid[I93_UID_BYTE_LEN];  /* UID[0]:MSB, ... UID[7]:LSB  */
383} tNFA_I93_INVENTORY;
384
385typedef struct                              /* RW_I93_SYS_INFO_EVT                          */
386{
387    UINT8           info_flags;             /* information flags                            */
388    UINT8           uid[I93_UID_BYTE_LEN];  /* UID                                          */
389    UINT8           dsfid;                  /* DSFID if I93_INFO_FLAG_DSFID                 */
390    UINT8           afi;                    /* AFI if I93_INFO_FLAG_AFI                     */
391    UINT16          num_block;              /* number of blocks if I93_INFO_FLAG_MEM_SIZE   */
392    UINT8           block_size;             /* block size in byte if I93_INFO_FLAG_MEM_SIZE */
393    UINT8           IC_reference;           /* IC Reference if I93_INFO_FLAG_IC_REF         */
394} tNFA_I93_SYS_INFO;
395
396typedef struct
397{
398    tNFA_STATUS         status;         /* Status of sending command       */
399    UINT8               sent_command;   /* sent command to tag             */
400    union
401    {
402        UINT8               error_code; /* error code defined in ISO 15693 */
403        tNFA_I93_INVENTORY  inventory;  /* inventory response              */
404        tNFA_I93_SYS_INFO   sys_info;   /* system information              */
405    } params;
406} tNFA_I93_CMD_CPLT;
407
408/* Data for NFA_CE_REGISTERED_EVT */
409typedef struct
410{
411    tNFA_STATUS         status;         /* NFA_STATUS_OK if successful                      */
412    tNFA_HANDLE         handle;         /* handle for NFA_CeRegisterFelicaSystemCodeOnDH () */
413                                        /*            NFA_CeRegisterT4tAidOnDH ()           */
414} tNFA_CE_REGISTERED;
415
416/* Data for NFA_CE_DEREGISTERED_EVT */
417typedef struct
418{
419    tNFA_HANDLE         handle;         /* handle from NFA_CE_REGISTERED_EVT   */
420} tNFA_CE_DEREGISTERED;
421
422/* Data for NFA_CE_ACTIVATED_EVT */
423typedef struct
424{
425    tNFA_STATUS         status;         /* NFA_STATUS_OK if successful              */
426    tNFA_HANDLE         handle;         /* handle from NFA_CE_REGISTERED_EVT        */
427    tNFC_ACTIVATE_DEVT  activate_ntf;   /* RF discovery activation details          */
428} tNFA_CE_ACTIVATED;
429
430/* Data for NFA_CE_DEACTIVATED_EVT */
431typedef struct
432{
433    tNFA_HANDLE         handle;         /* handle from NFA_CE_REGISTERED_EVT   */
434    tNFA_DEACTIVATE_TYPE type;          /* NFA_DEACTIVATE_TYPE_IDLE or NFA_DEACTIVATE_TYPE_SLEEP */
435} tNFA_CE_DEACTIVATED;
436
437/* Structure for NFA_CE_DATA_EVT data */
438typedef struct
439{
440    tNFA_HANDLE         handle;         /* handle from NFA_CE_REGISTERED_EVT    */
441    UINT8               *p_data;        /* Data buffer                          */
442    UINT16              len;            /* Length of data                       */
443} tNFA_CE_DATA;
444
445
446/* Union of all connection callback structures */
447typedef union
448{
449    tNFA_STATUS             status;             /* NFA_POLL_ENABLED_EVT                 */
450                                                /* NFA_POLL_DISABLED_EVT                */
451                                                /* NFA_CE_UICC_LISTEN_CONFIGURED_EVT    */
452                                                /* NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT */
453                                                /* NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT */
454                                                /* NFA_SELECT_RESULT_EVT                */
455                                                /* NFA_DEACTIVATE_FAIL_EVT              */
456                                                /* NFA_CE_NDEF_WRITE_START_EVT          */
457                                                /* NFA_SELECT_CPLT_EVT                  */
458                                                /* NFA_READ_CPLT_EVT                    */
459                                                /* NFA_WRITE_CPLT_EVT                   */
460                                                /* NFA_PRESENCE_CHECK_EVT               */
461                                                /* NFA_FORMAT_CPLT_EVT                  */
462                                                /* NFA_SET_TAG_RO_EVT                   */
463                                                /* NFA_UPDATE_RF_PARAM_RESULT_EVT       */
464                                                /* NFA_RW_INTF_ERROR_EVT                */
465    tNFA_DISC_RESULT         disc_result;       /* NFA_DISC_RESULT_EVT                  */
466    tNFA_ACTIVATED           activated;         /* NFA_ACTIVATED_EVT                    */
467    tNFA_DEACTIVATED         deactivated;       /* NFA_DEACTIVATED_EVT                  */
468    tNFA_NDEF_DETECT         ndef_detect;       /* NFA_NDEF_DETECT_EVT                  */
469    tNFA_TLV_DETECT          tlv_detect;        /* NFA_TLV_DETECT_EVT                   */
470    tNFA_RX_DATA             data;              /* NFA_DATA_EVT                         */
471    tNFA_CE_NDEF_WRITE_CPLT  ndef_write_cplt;   /* NFA_CE_NDEF_WRITE_CPLT_EVT           */
472    tNFA_LLCP_ACTIVATED      llcp_activated;    /* NFA_LLCP_ACTIVATED_EVT               */
473    tNFA_LLCP_DEACTIVATED    llcp_deactivated;  /* NFA_LLCP_DEACTIVATED_EVT             */
474    tNFA_I93_CMD_CPLT        i93_cmd_cplt;      /* NFA_I93_CMD_CPLT_EVT                 */
475    tNFA_CE_REGISTERED       ce_registered;     /* NFA_CE_REGISTERED_EVT                */
476    tNFA_CE_DEREGISTERED     ce_deregistered;   /* NFA_CE_DEREGISTERED_EVT              */
477    tNFA_CE_ACTIVATED        ce_activated;      /* NFA_CE_ACTIVATED_EVT                 */
478    tNFA_CE_DEACTIVATED      ce_deactivated;    /* NFA_CE_DEACTIVATED_EVT               */
479    tNFA_CE_DATA             ce_data;           /* NFA_CE_DATA_EVT                      */
480
481} tNFA_CONN_EVT_DATA;
482
483/* NFA Connection Callback */
484typedef void (tNFA_CONN_CBACK) (UINT8 event, tNFA_CONN_EVT_DATA *p_data);
485
486#ifndef NFA_DM_NUM_INTERFACE_MAP
487#define NFA_DM_NUM_INTERFACE_MAP    3
488#endif
489
490/* compile-time configuration structure for the RF Discovery Frequency for each technology */
491typedef struct
492{
493    UINT8   pa;     /* Frequency for NFC Technology A               */
494    UINT8   pb;     /* Frequency for NFC Technology B               */
495    UINT8   pf;     /* Frequency for NFC Technology F               */
496    UINT8   pi93;   /* Frequency for Proprietary Technology/15693   */
497    UINT8   pbp;    /* Frequency for Proprietary Technology/B-Prime */
498    UINT8   pk;     /* Frequency for Proprietary Technology/Kovio   */
499    UINT8   paa;    /* Frequency for NFC Technology A active mode   */
500    UINT8   pfa;    /* Frequency for NFC Technology F active mode   */
501} tNFA_DM_DISC_FREQ_CFG;
502
503/* compile-time configuration structure */
504typedef struct
505{
506    BOOLEAN auto_detect_ndef;           /* Automatic NDEF detection (when not in exclusive RF mode) */
507    BOOLEAN auto_read_ndef;             /* Automatic NDEF read (when not in exclusive RF mode)      */
508} tNFA_DM_CFG;
509
510/* compile-time configuration structure for HCI */
511typedef struct
512{
513    UINT16 hci_netwk_enable_timeout; /* Maximum idle(no HCP Pkt) time to wait for EE DISC REQ Ntf(s) */
514    UINT16 hcp_response_timeout;     /* Maximum time to wait for EE DISC REQ NTF(s) after HOT PLUG EVT(s) */
515} tNFA_HCI_CFG;
516
517/*
518** Exclusive RF mode listen configuration
519*/
520
521#define NFA_LB_MAX_NFCID0_LEN           4
522#define NFA_LF_MAX_SC_NFCID2            1
523#define NFA_LA_MAX_HIST_BYTES           15
524#define NFA_LB_MAX_H_INFO_LEN           15
525
526typedef struct
527{
528    /*
529    ** Discovery Configuration Parameters for Listen A
530    */
531    BOOLEAN la_enable;                          /* TRUE if listening A                      */
532    UINT8   la_bit_frame_sdd;                   /* Bit Frame SDD in Byte 1 of SENS_RES      */
533    UINT8   la_platform_config;                 /* Platform Config in Byte 2 of SENS_RES    */
534    UINT8   la_sel_info;                        /* Byte of SEL_RES                          */
535    UINT8   la_nfcid1_len;                      /* NFCID1 (0, 4, 7 or 10 bytes)             */
536    UINT8   la_nfcid1[NCI_NFCID1_MAX_LEN];      /*        if empty, NFCC will decide        */
537
538    /*
539    ** Discovery Configuration Parameters for Listen B
540    */
541    BOOLEAN lb_enable;                          /* TRUE if listening B                      */
542    UINT8   lb_sensb_info;                      /* Byte 2 of Protocol Info within SENSB_RES */
543    UINT8   lb_nfcid0_len;                      /* NFCID0 (0, 1 or 4 bytes)                 */
544    UINT8   lb_nfcid0[NFA_LB_MAX_NFCID0_LEN];   /*         if empty, NFCC will decide       */
545    UINT8   lb_app_data[NCI_PARAM_LEN_LB_APPDATA];/* Bytes 6 - 9 in SENSB_RES               */
546    UINT8   lb_sfgi;                            /* Start-Up Frame Guard Time                */
547    UINT8   lb_adc_fo;                          /* Byte 12 in SENSB_RES                     */
548
549    /*
550    ** Discovery Configuration Parameters for Listen F
551    */
552    BOOLEAN lf_enable;                          /* TRUE if listening F          */
553    UINT8   lf_con_bitr_f;                      /* bit rate to listen           */
554    UINT8   lf_protocol_type;                   /* Supported Protocols          */
555    UINT16  lf_t3t_flags;                       /* bit field indicating which lf_t3t_identifier are enabled */
556    UINT8   lf_t3t_identifier[NFA_LF_MAX_SC_NFCID2][NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN];
557                                                /* System Code and NFCID2       */
558    UINT8   lf_t3t_pmm[NCI_T3T_PMM_LEN];        /* Bytes 10 - 17 in SENSF_RES   */
559
560    /*
561    ** Discovery Configuration Parameters for Listen ISO-DEP
562    */
563    BOOLEAN li_enable;                          /* TRUE if listening ISO-DEP            */
564    UINT8   li_fwi;                             /* Frame Waiting Time Integer           */
565    UINT8   la_hist_bytes_len;                  /* historical bytes for Listen-A        */
566    UINT8   la_hist_bytes[NFA_LA_MAX_HIST_BYTES];
567    UINT8   lb_h_info_resp_len;                 /* higher layer response for Listen-B   */
568    UINT8   lb_h_info_resp[NFA_LB_MAX_H_INFO_LEN];
569
570    /*
571    ** Discovery Configuration Parameters for Listen NFC-DEP
572    */
573    BOOLEAN ln_enable;                          /* TRUE if listening NFC-DEP            */
574    UINT8   ln_wt;                              /* Waiting Time Integer                 */
575    UINT8   ln_atr_res_gen_bytes_len;           /* General bytes in ATR_RES             */
576    UINT8   ln_atr_res_gen_bytes[NCI_MAX_GEN_BYTES_LEN];
577    UINT8   ln_atr_res_config;                  /* Optional parameters (PPt) in ATR_RES */
578} tNFA_LISTEN_CFG;
579
580/* Data for NFA_UpdateRFCommParams () */
581typedef tNFC_RF_COMM_PARAMS tNFA_RF_COMM_PARAMS;
582
583/* RF Interface type */
584#define NFA_INTERFACE_FRAME         NFC_INTERFACE_FRAME
585#define NFA_INTERFACE_ISO_DEP       NFC_INTERFACE_ISO_DEP
586#define NFA_INTERFACE_NFC_DEP       NFC_INTERFACE_NFC_DEP
587typedef tNFC_INTF_TYPE tNFA_INTF_TYPE;
588
589/*******************************************************************************
590** NDEF Definitions
591*******************************************************************************/
592
593/* Definitions for tNFA_TNF (NDEF type name format ID) */
594#define NFA_TNF_EMPTY           NDEF_TNF_EMPTY      /* Empty or no type specified                       */
595#define NFA_TNF_WKT             NDEF_TNF_WKT        /* NFC Forum well-known type [NFC RTD]              */
596#define NFA_TNF_RFC2046_MEDIA   NDEF_TNF_MEDIA      /* Media-type as defined in RFC 2046 [RFC 2046]     */
597#define NFA_TNF_RFC3986_URI     NDEF_TNF_URI        /* Absolute URI as defined in RFC 3986 [RFC 3986]   */
598#define NFA_TNF_EXTERNAL        NDEF_TNF_EXT        /* NFC Forum external type [NFC RTD]                */
599#define NFA_TNF_UNKNOWN	        NDEF_TNF_UNKNOWN    /* Unknown                                          */
600#define NFA_TNF_UNCHANGED       NDEF_TNF_UNCHANGED  /* Unchanged                                        */
601#define NFA_TNF_RESERVED        NDEF_TNF_RESERVED   /* Reserved                                         */
602#define NFA_TNF_DEFAULT	        0xFF                /* Used to register default NDEF type handler       */
603typedef UINT8 tNFA_TNF;
604
605/* Definitions for tNFA_NDEF_URI_ID (Frequently used prefixes. For additional values, see [NFC RTD URI] */
606#define NFA_NDEF_URI_ID_ABSOLUTE    0x00            /* Unabridged URI.  */
607#define NFA_NDEF_URI_ID_HTTP        0x03            /* http://          */
608#define NFA_NDEF_URI_ID_HTTPS       0x04            /* https://         */
609#define NFA_NDEF_URI_ID_TEL         0x05            /* tel:             */
610#define NFA_NDEF_URI_ID_MAILTO      0x06            /* mailto:          */
611#define NFA_NDEF_URI_ID_FTP         0x0D            /* ftp://           */
612#define NFA_NDEF_URI_ID_FILE        0x1D            /* file://          */
613
614typedef UINT8 tNFA_NDEF_URI_ID;
615
616/* Events for tNFA_NDEF_CBACK */
617#define NFA_NDEF_REGISTER_EVT   0   /* NDEF record type registered. (In response to NFA_RegisterNDefTypeHandler)    */
618#define NFA_NDEF_DATA_EVT	    1   /* Received an NDEF message with the registered type. See [tNFA_NDEF_DATA]       */
619typedef UINT8 tNFA_NDEF_EVT;
620
621/* Structure for NFA_NDEF_REGISTER_EVT event data */
622typedef struct
623{
624    tNFA_STATUS status;             /* Status of the registration               */
625    tNFA_HANDLE ndef_type_handle;   /* Handle for this NDEF type registration.  */
626} tNFA_NDEF_REGISTER;
627
628/* Structure for NFA_NDEF_DATA_EVT event data */
629typedef struct
630{
631    tNFA_HANDLE ndef_type_handle;   /* Handle for NDEF type registration.   */
632    UINT8       *p_data;            /* Data buffer                          */
633    UINT32      len;                /* Length of data                       */
634} tNFA_NDEF_DATA;
635
636/* Union of all NDEF callback structures */
637typedef union
638{
639    tNFA_NDEF_REGISTER  ndef_reg;       /* Structure for NFA_NDEF_REGISTER_EVT event data   */
640    tNFA_NDEF_DATA      ndef_data;      /* Structure for NFA_NDEF_DATA_EVT event data       */
641} tNFA_NDEF_EVT_DATA;
642
643/* NFA_NDEF callback */
644typedef void (tNFA_NDEF_CBACK) (tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA *p_data);
645
646/* NFA VSC Callback */
647typedef void (tNFA_VSC_CBACK)(UINT8 event, UINT16 param_len, UINT8 *p_param);
648
649
650/*****************************************************************************
651**  External Function Declarations
652*****************************************************************************/
653#ifdef __cplusplus
654extern "C"
655{
656#endif
657
658/*******************************************************************************
659**
660** Function         NFA_Init
661**
662** Description      This function initializes control blocks for NFA
663**
664**                  p_hal_entry_tbl points to a table of HAL entry points
665**
666**                  NOTE: the buffer that p_hal_entry_tbl points must be
667**                  persistent until NFA is disabled.
668**
669**
670** Returns          none
671**
672*******************************************************************************/
673NFC_API extern void NFA_Init (tHAL_NFC_ENTRY *p_hal_entry_tbl);
674
675/*******************************************************************************
676**
677** Function         NFA_Enable
678**
679** Description      This function enables NFC. Prior to calling NFA_Enable,
680**                  the NFCC must be powered up, and ready to receive commands.
681**                  This function enables the tasks needed by NFC, opens the NCI
682**                  transport, resets the NFC controller, downloads patches to
683**                  the NFCC (if necessary), and initializes the NFC subsystems.
684**
685**                  This function should only be called once - typically when NFC
686**                  is enabled during boot-up, or when NFC is enabled from a
687**                  settings UI. Subsequent calls to NFA_Enable while NFA is
688**                  enabling or enabled will be ignored. When the NFC startup
689**                  procedure is completed, an NFA_DM_ENABLE_EVT is returned to the
690**                  application using the tNFA_DM_CBACK.
691**
692**                  The tNFA_CONN_CBACK parameter is used to register a callback
693**                  for polling, p2p and card emulation events.
694**
695**
696** Returns          NFA_STATUS_OK if successfully initiated
697**                  NFA_STATUS_FAILED otherwise
698**
699*******************************************************************************/
700NFC_API extern tNFA_STATUS NFA_Enable (tNFA_DM_CBACK       *p_dm_cback,
701                                       tNFA_CONN_CBACK     *p_conn_cback);
702
703/*******************************************************************************
704**
705** Function         NFA_Disable
706**
707** Description      This function is called to shutdown NFC. The tasks for NFC
708**                  are terminated, and clean up routines are performed. This
709**                  function is typically called during platform shut-down, or
710**                  when NFC is disabled from a settings UI. When the NFC
711**                  shutdown procedure is completed, an NFA_DM_DISABLE_EVT is
712**                  returned to the application using the tNFA_DM_CBACK.
713**
714**                  The platform should wait until the NFC_DISABLE_REVT is
715**                  received before powering down the NFC chip and NCI transport.
716**                  This is required to so that NFA can gracefully shut down any
717**                  open connections.
718**
719** Returns          NFA_STATUS_OK if successfully initiated
720**                  NFA_STATUS_FAILED otherwise
721**
722*******************************************************************************/
723NFC_API extern tNFA_STATUS NFA_Disable (BOOLEAN graceful);
724
725/*******************************************************************************
726**
727** Function         NFA_SetConfig
728**
729** Description      Set the configuration parameters to NFCC. The result is
730**                  reported with an NFA_DM_SET_CONFIG_EVT in the tNFA_DM_CBACK
731**                  callback.
732**
733** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
734**                  should happen before calling this function. Most Configuration
735**                  parameters are related to RF discovery.
736**
737** Returns          NFA_STATUS_OK if successfully initiated
738**                  NFA_STATUS_BUSY if previous setting is on-going
739**                  NFA_STATUS_FAILED otherwise
740**
741*******************************************************************************/
742NFC_API extern tNFA_STATUS NFA_SetConfig (tNFA_PMID    param_id,
743                                          UINT8        length,
744                                          UINT8       *p_data);
745
746/*******************************************************************************
747**
748** Function         NFA_GetConfig
749**
750** Description      Get the configuration parameters from NFCC. The result is
751**                  reported with an NFA_DM_GET_CONFIG_EVT in the tNFA_DM_CBACK
752**                  callback.
753**
754** Returns          NFA_STATUS_OK if successfully initiated
755**                  NFA_STATUS_FAILED otherwise
756**
757*******************************************************************************/
758NFC_API extern tNFA_STATUS NFA_GetConfig (UINT8 num_ids, tNFA_PMID *p_param_ids);
759
760/*******************************************************************************
761**
762** Function         NFA_RequestExclusiveRfControl
763**
764** Description      Request exclusive control of NFC.
765**                  - Previous behavior (polling/tag reading, DH card emulation)
766**                    will be suspended .
767**                  - Polling and listening will be done based on the specified
768**                    params
769**
770**                  The NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT event of
771**                  tNFA_CONN_CBACK indicates the status of the operation.
772**
773**                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT indicates link
774**                  activation/deactivation.
775**
776**                  NFA_SendRawFrame is used to send data to the peer. NFA_DATA_EVT
777**                  indicates data from the peer.
778**
779**                  If a tag is activated, then the NFA_RW APIs may be used to
780**                  send commands to the tag. Incoming NDEF messages are sent to
781**                  the NDEF callback.
782**
783**                  Once exclusive RF control has started, NFA will not activate
784**                  LLCP internally. The application has exclusive control of
785**                  the link.
786**
787** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
788**                  should happen before calling this function
789**
790** Returns          NFA_STATUS_OK if successfully initiated
791**                  NFA_STATUS_FAILED otherwise
792**
793*******************************************************************************/
794NFC_API extern tNFA_STATUS NFA_RequestExclusiveRfControl (tNFA_TECHNOLOGY_MASK poll_mask,
795                                                          tNFA_LISTEN_CFG *p_listen_cfg,
796                                                          tNFA_CONN_CBACK *p_conn_cback,
797                                                          tNFA_NDEF_CBACK *p_ndef_cback);
798
799/*******************************************************************************
800**
801** Function         NFA_ReleaseExclusiveRfControl
802**
803** Description      Release exclusive control of NFC. Once released, behavior
804**                  prior to obtaining exclusive RF control will resume.
805**
806Note??
807** Returns          NFA_STATUS_OK if successfully initiated
808**                  NFA_STATUS_FAILED otherwise
809**
810*******************************************************************************/
811NFC_API extern tNFA_STATUS NFA_ReleaseExclusiveRfControl (void);
812
813/*******************************************************************************
814**
815** Function         NFA_EnablePolling
816**
817** Description      Enable polling for technologies specified by poll_mask.
818**
819**                  The following events (notified using the connection
820**                  callback registered with NFA_Enable) are generated during
821**                  polling:
822**
823**                  - NFA_POLL_ENABLED_EVT indicates whether or not polling
824**                    successfully enabled.
825**                  - NFA_DISC_RESULT_EVT indicates there are more than one devices,
826**                    so application must select one of tags by calling NFA_Select().
827**                  - NFA_SELECT_RESULT_EVT indicates whether previous selection was
828**                    successful or not. If it was failed then application must select
829**                    again or deactivate by calling NFA_Deactivate().
830**                  - NFA_ACTIVATED_EVT is generated when an NFC link is activated.
831**                  - NFA_NDEF_DETECT_EVT is generated if tag is activated
832**                  - NFA_LLCP_ACTIVATED_EVT/NFA_LLCP_DEACTIVATED_EVT is generated
833**                    if NFC-DEP is activated
834**                  - NFA_DEACTIVATED_EVT will be returned after deactivating NFC link.
835**
836** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
837**                  should happen before calling this function
838**
839** Returns          NFA_STATUS_OK if successfully initiated
840**                  NFA_STATUS_FAILED otherwise
841**
842*******************************************************************************/
843NFC_API extern tNFA_STATUS NFA_EnablePolling (tNFA_TECHNOLOGY_MASK poll_mask);
844
845/*******************************************************************************
846**
847** Function         NFA_DisablePolling
848**
849** Description      Disable polling
850**                  NFA_POLL_DISABLED_EVT will be returned after stopping polling.
851**
852** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
853**                  should happen before calling this function
854**
855** Returns          NFA_STATUS_OK if successfully initiated
856**                  NFA_STATUS_FAILED otherwise
857**
858*******************************************************************************/
859NFC_API extern tNFA_STATUS NFA_DisablePolling (void);
860
861/*******************************************************************************
862**
863** Function         NFA_EnableListening
864**
865** Description      Enable listening.
866**                  NFA_LISTEN_ENABLED_EVT will be returned after listening is allowed.
867**
868**                  The actual listening technologies are specified by other NFA
869**                  API functions. Such functions include (but not limited to)
870**                  NFA_CeConfigureUiccListenTech.
871**                  If NFA_DisableListening () is called to ignore the listening technologies,
872**                  NFA_EnableListening () is called to restore the listening technologies
873**                  set by these functions.
874**
875** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
876**                  should happen before calling this function
877**
878** Returns          NFA_STATUS_OK if successfully initiated
879**                  NFA_STATUS_FAILED otherwise
880**
881*******************************************************************************/
882NFC_API extern tNFA_STATUS NFA_EnableListening (void);
883
884/*******************************************************************************
885**
886** Function         NFA_DisableListening
887**
888** Description      Disable listening
889**                  NFA_LISTEN_DISABLED_EVT will be returned after stopping listening.
890**                  This function is called to exclude listen at RF discovery.
891**
892** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
893**                  should happen before calling this function
894**
895** Returns          NFA_STATUS_OK if successfully initiated
896**                  NFA_STATUS_FAILED otherwise
897**
898*******************************************************************************/
899NFC_API extern tNFA_STATUS NFA_DisableListening (void);
900
901/*******************************************************************************
902**
903** Function         NFA_PauseP2p
904**
905** Description      Pause P2P services.
906**                  NFA_P2P_PAUSED_EVT will be returned after P2P services are
907**                  disabled.
908**
909**                  The P2P services enabled by NFA_P2p* API functions are not
910**                  available. NFA_ResumeP2p() is called to resume the P2P
911**                  services.
912**
913** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
914**                  should happen before calling this function
915**
916** Returns          NFA_STATUS_OK if successfully initiated
917**                  NFA_STATUS_FAILED otherwise
918**
919*******************************************************************************/
920NFC_API extern tNFA_STATUS NFA_PauseP2p (void);
921
922/*******************************************************************************
923**
924** Function         NFA_ResumeP2p
925**
926** Description      Resume P2P services.
927**                  NFA_P2P_RESUMED_EVT will be returned after P2P services are.
928**                  enables again.
929**
930** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
931**                  should happen before calling this function
932**
933** Returns          NFA_STATUS_OK if successfully initiated
934**                  NFA_STATUS_FAILED otherwise
935**
936*******************************************************************************/
937NFC_API extern tNFA_STATUS NFA_ResumeP2p (void);
938
939/*******************************************************************************
940**
941** Function         NFA_SetP2pListenTech
942**
943** Description      This function is called to set listen technology for NFC-DEP.
944**                  This funtion may be called before or after starting any server
945**                  on NFA P2P/CHO/SNEP.
946**                  If there is no technology for NFC-DEP, P2P listening will be
947**                  stopped.
948**
949**                  NFA_SET_P2P_LISTEN_TECH_EVT without data will be returned.
950**
951** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
952**                  should happen before calling this function
953**
954** Returns          NFA_STATUS_OK if successfully initiated
955**                  NFA_STATUS_FAILED otherwise
956**
957*******************************************************************************/
958NFC_API extern tNFA_STATUS NFA_SetP2pListenTech (tNFA_TECHNOLOGY_MASK tech_mask);
959
960/*******************************************************************************
961**
962** Function         NFA_StartRfDiscovery
963**
964** Description      Start RF discovery
965**                  RF discovery parameters shall be set by other APIs.
966**
967**                  An NFA_RF_DISCOVERY_STARTED_EVT indicates whether starting was successful or not.
968**
969** Returns          NFA_STATUS_OK if successfully initiated
970**                  NFA_STATUS_FAILED otherwise
971**
972*******************************************************************************/
973NFC_API extern tNFA_STATUS NFA_StartRfDiscovery (void);
974
975/*******************************************************************************
976**
977** Function         NFA_StopRfDiscovery
978**
979** Description      Stop RF discovery
980**
981**                  An NFA_RF_DISCOVERY_STOPPED_EVT indicates whether stopping was successful or not.
982**
983** Returns          NFA_STATUS_OK if successfully initiated
984**                  NFA_STATUS_FAILED otherwise
985**
986*******************************************************************************/
987NFC_API extern tNFA_STATUS NFA_StopRfDiscovery (void);
988
989/*******************************************************************************
990**
991** Function         NFA_SetRfDiscoveryDuration
992**
993** Description      Set the duration of the single discovery period in [ms].
994**                  Allowable range: 0 ms to 0xFFFF ms.
995**
996** Note:            If discovery is already started, the application should
997**                  call NFA_StopRfDiscovery prior to calling
998**                  NFA_SetRfDiscoveryDuration, and then call
999**                  NFA_StartRfDiscovery afterwards to restart discovery using
1000**                  the new duration.
1001**
1002** Returns:
1003**                  NFA_STATUS_OK, if command accepted
1004**                  NFA_STATUS_FAILED: otherwise
1005**
1006*******************************************************************************/
1007NFC_API extern tNFA_STATUS NFA_SetRfDiscoveryDuration (UINT16 discovery_period_ms);
1008
1009/*******************************************************************************
1010**
1011** Function         NFA_Select
1012**
1013** Description      Select one from detected devices by NFA_DISC_RESULT_EVT after the
1014**                  last discovery result is received.
1015**                  An NFA_SELECT_RESULT_EVT indicates whether selection was successful or not.
1016**                  If failed then application must select again or deactivate by NFA_Deactivate ().
1017**
1018** Returns          NFA_STATUS_OK if successfully initiated
1019**                  NFA_STATUS_INVALID_PARAM if RF interface is not matched protocol
1020**                  NFA_STATUS_FAILED otherwise
1021**
1022*******************************************************************************/
1023NFC_API extern tNFA_STATUS NFA_Select (UINT8             rf_disc_id,
1024                                       tNFA_NFC_PROTOCOL protocol,
1025                                       tNFA_INTF_TYPE    rf_interface);
1026
1027/*******************************************************************************
1028**
1029** Function         NFA_UpdateRFCommParams
1030**
1031** Description      This function is called to update RF Communication parameters
1032**                  once the Frame RF Interface has been activated.
1033**
1034**                  An NFA_UPDATE_RF_PARAM_RESULT_EVT indicates whether updating
1035**                  was successful or not.
1036**
1037** Returns          NFA_STATUS_OK if successfully initiated
1038**                  NFA_STATUS_FAILED otherwise
1039**
1040*******************************************************************************/
1041NFC_API extern tNFA_STATUS NFA_UpdateRFCommParams (tNFA_RF_COMM_PARAMS *p_params);
1042
1043/*******************************************************************************
1044**
1045** Function         NFA_Deactivate
1046**
1047** Description
1048**                  If sleep_mode=TRUE:
1049**                      Deselect the activated device by deactivating into sleep mode.
1050**
1051**                      An NFA_DEACTIVATE_FAIL_EVT indicates that selection was not successful.
1052**                      Application can select another discovered device or deactivate by NFA_Deactivate ()
1053**                      after receiving NFA_DEACTIVATED_EVT.
1054**
1055**                      Deactivating to sleep mode is not allowed when NFCC is in wait-for-host-select
1056**                      mode, or in listen-sleep states; NFA will deactivate to idle or discovery state
1057**                      for these cases respectively.
1058**
1059**
1060**                  If sleep_mode=FALSE:
1061**                      Deactivate the connection (e.g. as a result of presence check failure)
1062**                      NFA_DEACTIVATED_EVT will indicate that link is deactivated.
1063**                      Polling/listening will resume (unless the nfcc is in wait_for-all-discoveries state)
1064**
1065**
1066** Returns          NFA_STATUS_OK if successfully initiated
1067**                  NFA_STATUS_FAILED otherwise
1068**
1069*******************************************************************************/
1070NFC_API extern tNFA_STATUS NFA_Deactivate (BOOLEAN sleep_mode);
1071
1072/*******************************************************************************
1073**
1074** Function         NFA_SendRawFrame
1075**
1076** Description      Send a raw frame over the activated interface with the NFCC.
1077**                  This function can only be called after NFC link is activated.
1078**
1079**                  If the activated interface is a tag and auto-presence check is
1080**                  enabled then presence_check_start_delay can be used to indicate
1081**                  the delay in msec after which the next auto presence check
1082**                  command can be sent. NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
1083**                  can be used as the default value for the delay.
1084**
1085** Returns          NFA_STATUS_OK if successfully initiated
1086**                  NFA_STATUS_FAILED otherwise
1087**
1088*******************************************************************************/
1089NFC_API extern tNFA_STATUS NFA_SendRawFrame (UINT8  *p_raw_data,
1090                                             UINT16  data_len,
1091                                             UINT16  presence_check_start_delay);
1092
1093/*******************************************************************************
1094** NDEF APIs
1095*******************************************************************************/
1096
1097/*******************************************************************************
1098**
1099** Function         NFA_RegisterNDefTypeHandler
1100**
1101** Description      This function allows the applications to register for
1102**                  specific types of NDEF records. When NDEF records are
1103**                  received, NFA will parse the record-type field, and pass
1104**                  the record to the registered tNFA_NDEF_CBACK.
1105**
1106**                  For records types which were not registered, the record will
1107**                  be sent to the default handler. A default type-handler may
1108**                  be registered by calling this NFA_RegisterNDefTypeHandler
1109**                  with tnf=NFA_TNF_DEFAULT. In this case, all un-registered
1110**                  record types will be sent to the callback. Only one default
1111**                  handler may be registered at a time.
1112**
1113**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
1114**                  to indicate that registration was successful, and provide a
1115**                  handle for this record type.
1116**
1117**
1118** Returns          NFA_STATUS_OK if successfully initiated
1119**                  NFA_STATUS_FAILED otherwise
1120**
1121*******************************************************************************/
1122NFC_API extern tNFA_STATUS NFA_RegisterNDefTypeHandler (BOOLEAN          handle_whole_message,
1123                                                        tNFA_TNF         tnf,
1124                                                        UINT8           *p_type_name,
1125                                                        UINT8            type_name_len,
1126                                                        tNFA_NDEF_CBACK *p_ndef_cback);
1127
1128/*******************************************************************************
1129**
1130** Function         NFA_RegisterNDefUriHandler
1131**
1132** Description      This API is a special-case of NFA_RegisterNDefTypeHandler
1133**                  with TNF=NFA_TNF_WKT, and type_name='U' (URI record); and allows
1134**                  registering for specific URI types (e.g. 'tel:' or 'mailto:').
1135**
1136**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
1137**                  to indicate that registration was successful, and provide a
1138**                  handle for this registration.
1139**
1140**                  If uri_id=NFA_NDEF_URI_ID_ABSOLUTE, then p_abs_uri contains the
1141**                  unabridged URI. For all other uri_id values, the p_abs_uri
1142**                  parameter is ignored (i.e the URI prefix is implied by uri_id).
1143**                  See [NFC RTD URI] for more information.
1144**
1145** Returns          NFA_STATUS_OK if successfully initiated
1146**                  NFA_STATUS_FAILED otherwise
1147**
1148*******************************************************************************/
1149NFC_API extern tNFA_STATUS NFA_RegisterNDefUriHandler (BOOLEAN          handle_whole_message,
1150                                                       tNFA_NDEF_URI_ID uri_id,
1151                                                       UINT8            *p_abs_uri,
1152                                                       UINT8            uri_id_len,
1153                                                       tNFA_NDEF_CBACK  *p_ndef_cback);
1154
1155
1156/*******************************************************************************
1157**
1158** Function         NFA_DeregisterNDefTypeHandler
1159**
1160** Description      Deregister NDEF record type handler.
1161**
1162** Returns          NFA_STATUS_OK if successfully initiated
1163**                  NFA_STATUS_FAILED otherwise
1164**
1165*******************************************************************************/
1166NFC_API extern tNFA_STATUS NFA_DeregisterNDefTypeHandler (tNFA_HANDLE ndef_type_handle);
1167
1168
1169/*******************************************************************************
1170**
1171** Function         NFA_PowerOffSleepMode
1172**
1173** Description      This function is called to enter or leave NFCC Power Off Sleep mode
1174**                  NFA_DM_PWR_MODE_CHANGE_EVT will be sent to indicate status.
1175**
1176**                  start_stop : TRUE if entering Power Off Sleep mode
1177**                               FALSE if leaving Power Off Sleep mode
1178**
1179Note??
1180** Returns          NFA_STATUS_OK if successfully initiated
1181**                  NFA_STATUS_FAILED otherwise
1182**
1183*******************************************************************************/
1184NFC_API extern tNFA_STATUS NFA_PowerOffSleepMode (BOOLEAN start_stop);
1185
1186/*******************************************************************************
1187**
1188** Function         NFA_RegVSCback
1189**
1190** Description      This function is called to register or de-register a callback
1191**                  function to receive Proprietary NCI response and notification
1192**                  events.
1193**                  The maximum number of callback functions allowed is NFC_NUM_VS_CBACKS
1194**
1195** Returns          tNFC_STATUS
1196**
1197*******************************************************************************/
1198NFC_API extern tNFC_STATUS NFA_RegVSCback (BOOLEAN          is_register,
1199                                           tNFA_VSC_CBACK   *p_cback);
1200
1201/*******************************************************************************
1202**
1203** Function         NFA_SendVsCommand
1204**
1205** Description      This function is called to send an NCI Vendor Specific
1206**                  command to NFCC.
1207**
1208**                  oid             - The opcode of the VS command.
1209**                  cmd_params_len  - The command parameter len
1210**                  p_cmd_params    - The command parameter
1211**                  p_cback         - The callback function to receive the command
1212**                                    status
1213**
1214** Returns          NFA_STATUS_OK if successfully initiated
1215**                  NFA_STATUS_FAILED otherwise
1216**
1217*******************************************************************************/
1218NFC_API extern tNFA_STATUS NFA_SendVsCommand (UINT8            oid,
1219                                              UINT8            cmd_params_len,
1220                                              UINT8            *p_cmd_params,
1221                                              tNFA_VSC_CBACK   *p_cback);
1222
1223/*******************************************************************************
1224**
1225** Function         NFA_SetTraceLevel
1226**
1227** Description      This function sets the trace level for NFA.  If called with
1228**                  a value of 0xFF, it simply returns the current trace level.
1229**
1230** Returns          The new or current trace level
1231**
1232*******************************************************************************/
1233NFC_API extern UINT8 NFA_SetTraceLevel (UINT8 new_level);
1234
1235
1236#ifdef __cplusplus
1237}
1238#endif
1239
1240#endif /* NFA_API_H */
1241
1242