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