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