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