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