1 /****************************************************************************** 2 * 3 * Copyright (C) 2009-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 file contains the Near Field Communication (NFC) API function 22 * external definitions. 23 * 24 ******************************************************************************/ 25 26 #ifndef NFC_API_H 27 #define NFC_API_H 28 29 #include "gki.h" 30 #include "nci_defs.h" 31 #include "nfc_hal_api.h" 32 #include "nfc_target.h" 33 34 #include "vendor_cfg.h" 35 36 /* NFC application return status codes */ 37 /* Command succeeded */ 38 #define NFC_STATUS_OK NCI_STATUS_OK 39 /* Command is rejected. */ 40 #define NFC_STATUS_REJECTED NCI_STATUS_REJECTED 41 /* Message is corrupted */ 42 #define NFC_STATUS_MSG_CORRUPTED NCI_STATUS_MESSAGE_CORRUPTED 43 /* buffer full */ 44 #define NFC_STATUS_BUFFER_FULL NCI_STATUS_BUFFER_FULL 45 /* failed */ 46 #define NFC_STATUS_FAILED NCI_STATUS_FAILED 47 /* not initialized */ 48 #define NFC_STATUS_NOT_INITIALIZED NCI_STATUS_NOT_INITIALIZED 49 /* Syntax error */ 50 #define NFC_STATUS_SYNTAX_ERROR NCI_STATUS_SYNTAX_ERROR 51 /* Semantic error */ 52 #define NFC_STATUS_SEMANTIC_ERROR NCI_STATUS_SEMANTIC_ERROR 53 /* Unknown NCI Group ID */ 54 #define NFC_STATUS_UNKNOWN_GID NCI_STATUS_UNKNOWN_GID 55 /* Unknown NCI Opcode */ 56 #define NFC_STATUS_UNKNOWN_OID NCI_STATUS_UNKNOWN_OID 57 /* Invalid Parameter */ 58 #define NFC_STATUS_INVALID_PARAM NCI_STATUS_INVALID_PARAM 59 /* Message size too big */ 60 #define NFC_STATUS_MSG_SIZE_TOO_BIG NCI_STATUS_MSG_SIZE_TOO_BIG 61 /* Already started */ 62 #define NFC_STATUS_ALREADY_STARTED NCI_STATUS_ALREADY_STARTED 63 /* Activation Failed */ 64 #define NFC_STATUS_ACTIVATION_FAILED NCI_STATUS_ACTIVATION_FAILED 65 /* Tear Down Error */ 66 #define NFC_STATUS_TEAR_DOWN NCI_STATUS_TEAR_DOWN 67 /* RF transmission error*/ 68 #define NFC_STATUS_RF_TRANSMISSION_ERR NCI_STATUS_RF_TRANSMISSION_ERR 69 /* RF protocol error */ 70 #define NFC_STATUS_RF_PROTOCOL_ERR NCI_STATUS_RF_PROTOCOL_ERR 71 /* RF Timeout */ 72 #define NFC_STATUS_TIMEOUT NCI_STATUS_TIMEOUT 73 /* EE Intf activate err */ 74 #define NFC_STATUS_EE_INTF_ACTIVE_FAIL NCI_STATUS_EE_INTF_ACTIVE_FAIL 75 /* EE transmission error*/ 76 #define NFC_STATUS_EE_TRANSMISSION_ERR NCI_STATUS_EE_TRANSMISSION_ERR 77 /* EE protocol error */ 78 #define NFC_STATUS_EE_PROTOCOL_ERR NCI_STATUS_EE_PROTOCOL_ERR 79 /* EE Timeout */ 80 #define NFC_STATUS_EE_TIMEOUT NCI_STATUS_EE_TIMEOUT 81 82 /* 0xE0 ~0xFF are proprietary status codes */ 83 /* Command started successfully */ 84 #define NFC_STATUS_CMD_STARTED 0xE3 85 /* NFCC Timeout in responding to an NCI command */ 86 #define NFC_STATUS_HW_TIMEOUT 0xE4 87 /* More (same) event to follow */ 88 #define NFC_STATUS_CONTINUE 0xE5 89 /* API is called to perform illegal function */ 90 #define NFC_STATUS_REFUSED 0xE6 91 /* Wrong format of R-APDU, CC file or NDEF file */ 92 #define NFC_STATUS_BAD_RESP 0xE7 93 /* 7816 Status Word is not command complete(0x9000) */ 94 #define NFC_STATUS_CMD_NOT_CMPLTD 0xE8 95 /* Out of GKI buffers */ 96 #define NFC_STATUS_NO_BUFFERS 0xE9 97 /* Protocol mismatch between API and activated one */ 98 #define NFC_STATUS_WRONG_PROTOCOL 0xEA 99 /* Another Tag command is already in progress */ 100 #define NFC_STATUS_BUSY 0xEB 101 102 /* Link Loss */ 103 #define NFC_STATUS_LINK_LOSS 0xFC 104 /* data len exceeds MIU */ 105 #define NFC_STATUS_BAD_LENGTH 0xFD 106 /* invalid handle */ 107 #define NFC_STATUS_BAD_HANDLE 0xFE 108 /* congested */ 109 #define NFC_STATUS_CONGESTED 0xFF 110 typedef uint8_t tNFC_STATUS; 111 112 /********************************************** 113 * NFC Config Parameter IDs defined by NCI 114 **********************************************/ 115 #define NFC_PMID_TOTAL_DURATION NCI_PARAM_ID_TOTAL_DURATION 116 #define NFC_PMID_CON_DEVICES_LIMIT NCI_PARAM_ID_CON_DEVICES_LIMIT 117 #define NFC_PMID_PA_BAILOUT NCI_PARAM_ID_PA_BAILOUT 118 #define NFC_PMID_CON_DISCOVERY_PARAM NCI_PARAM_ID_CON_DISCOVERY_PARAM 119 #define NFC_PMID_PB_AFI NCI_PARAM_ID_PB_AFI 120 #define NFC_PMID_PB_BAILOUT NCI_PARAM_ID_PB_BAILOUT 121 #define NFC_PMID_PB_ATTRIB_PARAM1 NCI_PARAM_ID_PB_ATTRIB_PARAM1 122 #define NFC_PMID_PF_BIT_RATE NCI_PARAM_ID_PF_BIT_RATE 123 #define NFC_PMID_PF_RC NCI_PARAM_ID_PF_RC 124 #define NFC_PMID_PB_H_INFO NCI_PARAM_ID_PB_H_INFO 125 #define NFC_PMID_BITR_NFC_DEP NCI_PARAM_ID_BITR_NFC_DEP 126 #define NFC_PMID_ATR_REQ_GEN_BYTES NCI_PARAM_ID_ATR_REQ_GEN_BYTES 127 #define NFC_PMID_ATR_REQ_CONFIG NCI_PARAM_ID_ATR_REQ_CONFIG 128 #define NFC_PMID_LA_HIST_BY NCI_PARAM_ID_LA_HIST_BY 129 #define NFC_PMID_LA_NFCID1 NCI_PARAM_ID_LA_NFCID1 130 #define NFC_PMID_PI_BIT_RATE NCI_PARAM_ID_PI_BIT_RATE 131 #define NFC_PMID_LA_BIT_FRAME_SDD NCI_PARAM_ID_LA_BIT_FRAME_SDD 132 #define NFC_PMID_LA_PLATFORM_CONFIG NCI_PARAM_ID_LA_PLATFORM_CONFIG 133 #define NFC_PMID_LA_SEL_INFO NCI_PARAM_ID_LA_SEL_INFO 134 #define NFC_PMID_LI_BIT_RATE NCI_PARAM_ID_LI_BIT_RATE 135 #define NFC_PMID_LB_SENSB_INFO NCI_PARAM_ID_LB_SENSB_INFO 136 #define NFC_PMID_LB_PROTOCOL NCI_PARAM_ID_LB_PROTOCOL 137 #define NFC_PMID_LB_H_INFO NCI_PARAM_ID_LB_H_INFO_RSP 138 #define NFC_PMID_LB_NFCID0 NCI_PARAM_ID_LB_NFCID0 139 #define NFC_PMID_LB_APPDATA NCI_PARAM_ID_LB_APPDATA 140 #define NFC_PMID_LB_SFGI NCI_PARAM_ID_LB_SFGI 141 #define NFC_PMID_LB_ADC_FO NCI_PARAM_ID_LB_ADC_FO 142 #define NFC_PMID_LF_T3T_ID1 NCI_PARAM_ID_LF_T3T_ID1 143 #define NFC_PMID_LF_T3T_ID2 NCI_PARAM_ID_LF_T3T_ID2 144 #define NFC_PMID_LF_T3T_ID3 NCI_PARAM_ID_LF_T3T_ID3 145 #define NFC_PMID_LF_T3T_ID4 NCI_PARAM_ID_LF_T3T_ID4 146 #define NFC_PMID_LF_T3T_ID5 NCI_PARAM_ID_LF_T3T_ID5 147 #define NFC_PMID_LF_T3T_ID6 NCI_PARAM_ID_LF_T3T_ID6 148 #define NFC_PMID_LF_T3T_ID7 NCI_PARAM_ID_LF_T3T_ID7 149 #define NFC_PMID_LF_T3T_ID8 NCI_PARAM_ID_LF_T3T_ID8 150 #define NFC_PMID_LF_T3T_ID9 NCI_PARAM_ID_LF_T3T_ID9 151 #define NFC_PMID_LF_T3T_ID10 NCI_PARAM_ID_LF_T3T_ID10 152 #define NFC_PMID_LF_T3T_ID11 NCI_PARAM_ID_LF_T3T_ID11 153 #define NFC_PMID_LF_T3T_ID12 NCI_PARAM_ID_LF_T3T_ID12 154 #define NFC_PMID_LF_T3T_ID13 NCI_PARAM_ID_LF_T3T_ID13 155 #define NFC_PMID_LF_T3T_ID14 NCI_PARAM_ID_LF_T3T_ID14 156 #define NFC_PMID_LF_T3T_ID15 NCI_PARAM_ID_LF_T3T_ID15 157 #define NFC_PMID_LF_T3T_ID16 NCI_PARAM_ID_LF_T3T_ID16 158 #define NFC_PMID_LF_PROTOCOL NCI_PARAM_ID_LF_PROTOCOL 159 #define NFC_PMID_LF_T3T_PMM NCI_PARAM_ID_LF_T3T_PMM 160 #define NFC_PMID_LF_T3T_MAX NCI_PARAM_ID_LF_T3T_MAX 161 #define NFC_PMID_LF_T3T_FLAGS2 NCI_PARAM_ID_LF_T3T_FLAGS2 162 #define NFC_PMID_FWI NCI_PARAM_ID_FWI 163 #define NFC_PMID_LF_CON_BITR_F NCI_PARAM_ID_LF_CON_BITR_F 164 #define NFC_PMID_WT NCI_PARAM_ID_WT 165 #define NFC_PMID_ATR_RES_GEN_BYTES NCI_PARAM_ID_ATR_RES_GEN_BYTES 166 #define NFC_PMID_ATR_RSP_CONFIG NCI_PARAM_ID_ATR_RSP_CONFIG 167 #define NFC_PMID_RF_FIELD_INFO NCI_PARAM_ID_RF_FIELD_INFO 168 #define NFC_PMID_NFC_DEP_OP NCI_PARAM_ID_NFC_DEP_OP 169 #define NFC_PARAM_ID_RF_EE_ACTION NCI_PARAM_ID_RF_EE_ACTION 170 #define NFC_PARAM_ID_ISO_DEP_OP NCI_PARAM_ID_ISO_DEP_OP 171 172 /* Technology based routing */ 173 #define NFC_ROUTE_TAG_TECH NCI_ROUTE_TAG_TECH 174 /* Protocol based routing */ 175 #define NFC_ROUTE_TAG_PROTO NCI_ROUTE_TAG_PROTO 176 #define NFC_ROUTE_TAG_AID NCI_ROUTE_TAG_AID /* AID routing */ 177 /* tag, len, 2 byte value for technology/protocol based routing */ 178 #define NFC_ROUTE_TLV_ENTRY_SIZE 4 179 180 /* For routing */ 181 #define NFC_DH_ID NCI_DH_ID /* for DH */ 182 /* To identify the loopback test */ 183 /* use a proprietary range */ 184 #define NFC_TEST_ID NCI_TEST_ID 185 186 typedef uint8_t tNFC_PMID; 187 #define NFC_TL_SIZE 2 188 #define NFC_SAVED_CMD_SIZE 2 189 190 typedef tNCI_DISCOVER_MAPS tNFC_DISCOVER_MAPS; 191 typedef tNCI_DISCOVER_PARAMS tNFC_DISCOVER_PARAMS; 192 193 /* all NFC Manager Callback functions have prototype like void (cback) (uint8_t 194 * event, void *p_data) 195 * tNFC_DATA_CBACK uses connection id as the first parameter; range 0x00-0x0F. 196 * tNFC_DISCOVER_CBACK uses tNFC_DISCOVER_EVT; range 0x4000 ~ 197 * tNFC_RESPONSE_CBACK uses tNFC_RESPONSE_EVT; range 0x5000 ~ 198 */ 199 200 #define NFC_FIRST_DEVT 0x4000 201 #define NFC_FIRST_REVT 0x5000 202 #define NFC_FIRST_CEVT 0x6000 203 #define NFC_FIRST_TEVT 0x8000 204 205 /* the events reported on tNFC_RESPONSE_CBACK */ 206 enum { 207 NFC_ENABLE_REVT = NFC_FIRST_REVT, /* 0 Enable event */ 208 NFC_DISABLE_REVT, /* 1 Disable event */ 209 NFC_SET_CONFIG_REVT, /* 2 Set Config Response */ 210 NFC_GET_CONFIG_REVT, /* 3 Get Config Response */ 211 NFC_NFCEE_DISCOVER_REVT, /* 4 Discover NFCEE response */ 212 NFC_NFCEE_INFO_REVT, /* 5 Discover NFCEE Notification */ 213 NFC_NFCEE_MODE_SET_REVT, /* 6 NFCEE Mode Set response */ 214 NFC_RF_FIELD_REVT, /* 7 RF Field information */ 215 NFC_EE_ACTION_REVT, /* 8 EE Action notification */ 216 NFC_EE_DISCOVER_REQ_REVT, /* 9 EE Discover Req notification */ 217 NFC_SET_ROUTING_REVT, /* 10 Configure Routing response */ 218 NFC_GET_ROUTING_REVT, /* 11 Retrieve Routing response */ 219 NFC_RF_COMM_PARAMS_UPDATE_REVT, /* 12 RF Communication Param Update */ 220 NFC_GEN_ERROR_REVT, /* 13 generic error notification */ 221 NFC_NFCC_RESTART_REVT, /* 14 NFCC has been re-initialized */ 222 NFC_NFCC_TIMEOUT_REVT, /* 15 NFCC is not responding */ 223 NFC_NFCC_TRANSPORT_ERR_REVT, /* 16 NCI Tranport error */ 224 NFC_NFCC_POWER_OFF_REVT, /* 17 NFCC turned off */ 225 NFC_SET_POWER_SUB_STATE_REVT, /* 18 Set power sub state response */ 226 NFC_FIRST_VS_REVT /* First vendor-specific rsp event */ 227 }; 228 typedef uint16_t tNFC_RESPONSE_EVT; 229 230 enum { 231 NFC_CONN_CREATE_CEVT = NFC_FIRST_CEVT, /* 0 Conn Create Response */ 232 NFC_CONN_CLOSE_CEVT, /* 1 Conn Close Response */ 233 NFC_DEACTIVATE_CEVT, /* 2 Deactivate response/notificatn*/ 234 NFC_DATA_CEVT, /* 3 Data */ 235 NFC_ERROR_CEVT, /* 4 generic or interface error */ 236 NFC_DATA_START_CEVT /* 5 received the first fragment on RF link */ 237 }; 238 typedef uint16_t tNFC_CONN_EVT; 239 240 #define NFC_NFCC_INFO_LEN 4 241 #ifndef NFC_NFCC_MAX_NUM_VS_INTERFACE 242 #define NFC_NFCC_MAX_NUM_VS_INTERFACE 5 243 #endif 244 typedef struct { 245 tNFC_STATUS status; /* The event status. */ 246 uint8_t nci_version; /* the NCI version of NFCC */ 247 uint8_t max_conn; /* max number of connections by NFCC*/ 248 uint32_t nci_features; /* the NCI features of NFCC */ 249 uint16_t nci_interfaces; /* the NCI interfaces of NFCC */ 250 uint16_t max_ce_table; /* the max routing table size */ 251 uint16_t max_param_size; /* Max Size for Large Parameters */ 252 uint8_t manufacture_id; /* the Manufacture ID for NFCC */ 253 uint8_t nfcc_info[NFC_NFCC_INFO_LEN]; /* the Manufacture Info for NFCC */ 254 uint8_t vs_interface 255 [NFC_NFCC_MAX_NUM_VS_INTERFACE]; /* the NCI VS interfaces of NFCC */ 256 uint8_t hci_packet_size; /*HCI payload size*/ 257 uint8_t hci_conn_credits; /*max number of HCI credits*/ 258 uint16_t max_nfc_v_size; /* maximum frame size for NFC-V*/ 259 } tNFC_ENABLE_REVT; 260 261 #define NFC_MAX_NUM_IDS 125 262 /* the data type associated with NFC_SET_CONFIG_REVT */ 263 typedef struct { 264 tNFC_STATUS status; /* The event status. */ 265 uint8_t num_param_id; /* Number of rejected NCI Param ID */ 266 uint8_t param_ids[NFC_MAX_NUM_IDS]; /* NCI Param ID */ 267 } tNFC_SET_CONFIG_REVT; 268 269 /* the data type associated with NFC_GET_CONFIG_REVT */ 270 typedef struct { 271 tNFC_STATUS status; /* The event status. */ 272 uint16_t tlv_size; /* The length of TLV */ 273 uint8_t* p_param_tlvs; /* TLV */ 274 } tNFC_GET_CONFIG_REVT; 275 276 /* the data type associated with NFC_NFCEE_DISCOVER_REVT */ 277 typedef struct { 278 tNFC_STATUS status; /* The event status. */ 279 uint8_t num_nfcee; /* The number of NFCEE */ 280 } tNFC_NFCEE_DISCOVER_REVT; 281 282 #define NFC_NFCEE_INTERFACE_APDU NCI_NFCEE_INTERFACE_APDU 283 #define NFC_NFCEE_INTERFACE_HCI_ACCESS NCI_NFCEE_INTERFACE_HCI_ACCESS 284 #define NFC_NFCEE_INTERFACE_T3T NCI_NFCEE_INTERFACE_T3T 285 #define NFC_NFCEE_INTERFACE_TRANSPARENT NCI_NFCEE_INTERFACE_TRANSPARENT 286 #define NFC_NFCEE_INTERFACE_PROPRIETARY NCI_NFCEE_INTERFACE_PROPRIETARY 287 typedef uint8_t tNFC_NFCEE_INTERFACE; 288 289 #define NFC_NFCEE_TAG_HW_ID NCI_NFCEE_TAG_HW_ID 290 #define NFC_NFCEE_TAG_ATR_BYTES NCI_NFCEE_TAG_ATR_BYTES 291 #define NFC_NFCEE_TAG_T3T_INFO NCI_NFCEE_TAG_T3T_INFO 292 #define NFC_NFCEE_TAG_HCI_HOST_ID NCI_NFCEE_TAG_HCI_HOST_ID 293 typedef uint8_t tNFC_NFCEE_TAG; 294 /* additional NFCEE Info */ 295 typedef struct { 296 tNFC_NFCEE_TAG tag; 297 uint8_t len; 298 uint8_t info[NFC_MAX_EE_INFO]; 299 } tNFC_NFCEE_TLV; 300 301 /* NFCEE connected and inactive */ 302 #define NFC_NFCEE_STATUS_INACTIVE NCI_NFCEE_STS_CONN_INACTIVE 303 /* NFCEE connected and active */ 304 #define NFC_NFCEE_STATUS_ACTIVE NCI_NFCEE_STS_CONN_ACTIVE 305 /* NFCEE removed */ 306 #define NFC_NFCEE_STATUS_REMOVED NCI_NFCEE_STS_REMOVED 307 /* the data type associated with NFC_NFCEE_INFO_REVT */ 308 typedef struct { 309 tNFC_STATUS status; /* The event status - place holder */ 310 uint8_t nfcee_id; /* NFCEE ID */ 311 uint8_t ee_status; /* The NFCEE status. */ 312 uint8_t num_interface; /* number of NFCEE interfaces */ 313 uint8_t ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE interface */ 314 uint8_t num_tlvs; /* number of TLVs */ 315 tNFC_NFCEE_TLV ee_tlv[NFC_MAX_EE_TLVS]; /* The TLVs associated with NFCEE */ 316 } tNFC_NFCEE_INFO_REVT; 317 318 #define NFC_MODE_ACTIVATE NCI_NFCEE_MD_ACTIVATE 319 #define NFC_MODE_DEACTIVATE NCI_NFCEE_MD_DEACTIVATE 320 typedef uint8_t tNFC_NFCEE_MODE; 321 /* the data type associated with NFC_NFCEE_MODE_SET_REVT */ 322 typedef struct { 323 tNFC_STATUS status; /* The event status.*/ 324 uint8_t nfcee_id; /* NFCEE ID */ 325 tNFC_NFCEE_MODE mode; /* NFCEE mode */ 326 } tNFC_NFCEE_MODE_SET_REVT; 327 328 #if (APPL_DTA_MODE == TRUE) 329 /* This data type is for FW Version */ 330 typedef struct { 331 uint8_t rom_code_version; /* ROM code Version */ 332 uint8_t major_version; /* Major Version */ 333 uint8_t minor_version; /* Minor Version */ 334 } tNFC_FW_VERSION; 335 #endif 336 #define NFC_MAX_AID_LEN NCI_MAX_AID_LEN /* 16 */ 337 338 /* the data type associated with NFC_CE_GET_ROUTING_REVT */ 339 typedef struct { 340 tNFC_STATUS status; /* The event status */ 341 uint8_t nfcee_id; /* NFCEE ID */ 342 uint8_t num_tlvs; /* number of TLVs */ 343 uint8_t tlv_size; /* the total len of all TLVs */ 344 uint8_t param_tlvs[NFC_MAX_EE_TLV_SIZE]; /* the TLVs */ 345 } tNFC_GET_ROUTING_REVT; 346 347 /* the data type associated with NFC_CONN_CREATE_CEVT */ 348 typedef struct { 349 tNFC_STATUS status; /* The event status */ 350 uint8_t dest_type; /* the destination type */ 351 uint8_t id; /* NFCEE ID or RF Discovery ID */ 352 uint8_t buff_size; /* The max buffer size */ 353 uint8_t num_buffs; /* The number of buffers */ 354 } tNFC_CONN_CREATE_CEVT; 355 356 /* the data type associated with NFC_CONN_CLOSE_CEVT */ 357 typedef struct { 358 tNFC_STATUS status; /* The event status */ 359 } tNFC_CONN_CLOSE_CEVT; 360 361 /* the data type associated with NFC_DATA_CEVT */ 362 typedef struct { 363 tNFC_STATUS status; /* The event status */ 364 NFC_HDR* p_data; /* The received Data */ 365 } tNFC_DATA_CEVT; 366 367 /* RF Field Status */ 368 /* No field generated by remote device */ 369 #define NFC_RF_STS_NO_REMOTE NCI_RF_STS_NO_REMOTE 370 /* field generated by remote device */ 371 #define NFC_RF_STS_REMOTE NCI_RF_STS_REMOTE 372 typedef uint8_t tNFC_RF_STS; 373 374 /* RF Field Technologies */ 375 #define NFC_RF_TECHNOLOGY_A NCI_RF_TECHNOLOGY_A 376 #define NFC_RF_TECHNOLOGY_B NCI_RF_TECHNOLOGY_B 377 #define NFC_RF_TECHNOLOGY_F NCI_RF_TECHNOLOGY_F 378 #define NFC_RF_TECHNOLOGY_V NCI_RF_TECHNOLOGY_V 379 typedef uint8_t tNFC_RF_TECH; 380 381 #ifdef __cplusplus 382 extern "C" uint8_t NFC_GetNCIVersion(); 383 #else 384 extern uint8_t NFC_GetNCIVersion(); 385 #endif 386 387 /* Supported Protocols */ 388 #define NFC_PROTOCOL_UNKNOWN NCI_PROTOCOL_UNKNOWN /* Unknown */ 389 /* Type1Tag - NFC-A */ 390 #define NFC_PROTOCOL_T1T NCI_PROTOCOL_T1T 391 /* Type2Tag - NFC-A */ 392 #define NFC_PROTOCOL_T2T NCI_PROTOCOL_T2T 393 /* Type3Tag - NFC-F */ 394 #define NFC_PROTOCOL_T3T NCI_PROTOCOL_T3T 395 /* Type5Tag - NFC-V/ISO15693*/ 396 #define NFC_PROTOCOL_T5T NFC_PROTOCOL_T5T_(NFC_GetNCIVersion()) 397 #define NFC_PROTOCOL_T5T_(x) \ 398 ((x == NCI_VERSION_2_0) ? NCI_PROTOCOL_T5T : NCI_PROTOCOL_15693) 399 /* Type 4A,4B - NFC-A or NFC-B */ 400 #define NFC_PROTOCOL_ISO_DEP NCI_PROTOCOL_ISO_DEP 401 /* NFCDEP/LLCP - NFC-A or NFC-F */ 402 #define NFC_PROTOCOL_NFC_DEP NCI_PROTOCOL_NFC_DEP 403 #define NFC_PROTOCOL_MIFARE NCI_PROTOCOL_MIFARE 404 #define NFC_PROTOCOL_ISO15693 NCI_PROTOCOL_15693 405 #define NFC_PROTOCOL_B_PRIME NCI_PROTOCOL_B_PRIME 406 #define NFC_PROTOCOL_KOVIO NCI_PROTOCOL_KOVIO 407 typedef uint8_t tNFC_PROTOCOL; 408 409 /* Discovery Types/Detected Technology and Mode */ 410 #define NFC_DISCOVERY_TYPE_POLL_A NCI_DISCOVERY_TYPE_POLL_A 411 #define NFC_DISCOVERY_TYPE_POLL_B NCI_DISCOVERY_TYPE_POLL_B 412 #define NFC_DISCOVERY_TYPE_POLL_F NCI_DISCOVERY_TYPE_POLL_F 413 #define NFC_DISCOVERY_TYPE_POLL_A_ACTIVE NCI_DISCOVERY_TYPE_POLL_A_ACTIVE 414 #define NFC_DISCOVERY_TYPE_POLL_F_ACTIVE NCI_DISCOVERY_TYPE_POLL_F_ACTIVE 415 #define NFC_DISCOVERY_TYPE_POLL_ACTIVE NCI_DISCOVERY_TYPE_POLL_ACTIVE 416 #define NFC_DISCOVERY_TYPE_POLL_V NCI_DISCOVERY_TYPE_POLL_V 417 #define NFC_DISCOVERY_TYPE_POLL_B_PRIME NCI_DISCOVERY_TYPE_POLL_B_PRIME 418 #define NFC_DISCOVERY_TYPE_POLL_KOVIO NCI_DISCOVERY_TYPE_POLL_KOVIO 419 #define NFC_DISCOVERY_TYPE_LISTEN_A NCI_DISCOVERY_TYPE_LISTEN_A 420 #define NFC_DISCOVERY_TYPE_LISTEN_B NCI_DISCOVERY_TYPE_LISTEN_B 421 #define NFC_DISCOVERY_TYPE_LISTEN_F NCI_DISCOVERY_TYPE_LISTEN_F 422 #define NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE 423 #define NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE 424 #define NFC_DISCOVERY_TYPE_LISTEN_ACTIVE NCI_DISCOVERY_TYPE_LISTEN_ACTIVE 425 #define NFC_DISCOVERY_TYPE_LISTEN_ISO15693 NCI_DISCOVERY_TYPE_LISTEN_ISO15693 426 #define NFC_DISCOVERY_TYPE_LISTEN_B_PRIME NCI_DISCOVERY_TYPE_LISTEN_B_PRIME 427 typedef uint8_t tNFC_DISCOVERY_TYPE; 428 typedef uint8_t tNFC_RF_TECH_N_MODE; 429 430 /* Select Response codes */ 431 #define NFC_SEL_RES_NFC_FORUM_T2T 0x00 432 #define NFC_SEL_RES_MF_CLASSIC 0x08 433 434 /* Bit Rates */ 435 #define NFC_BIT_RATE_106 NCI_BIT_RATE_106 /* 106 kbit/s */ 436 #define NFC_BIT_RATE_212 NCI_BIT_RATE_212 /* 212 kbit/s */ 437 #define NFC_BIT_RATE_424 NCI_BIT_RATE_424 /* 424 kbit/s */ 438 #define NFC_BIT_RATE_848 NCI_BIT_RATE_848 /* 848 Kbit/s */ 439 #define NFC_BIT_RATE_1696 NCI_BIT_RATE_1696 /* 1696 Kbit/s*/ 440 #define NFC_BIT_RATE_3392 NCI_BIT_RATE_3392 /* 3392 Kbit/s*/ 441 #define NFC_BIT_RATE_6784 NCI_BIT_RATE_6784 /* 6784 Kbit/s*/ 442 typedef uint8_t tNFC_BIT_RATE; 443 444 /********************************************** 445 * Interface Types 446 **********************************************/ 447 #define NFC_INTERFACE_EE_DIRECT_RF NCI_INTERFACE_EE_DIRECT_RF 448 #define NFC_INTERFACE_FRAME NCI_INTERFACE_FRAME 449 #define NFC_INTERFACE_ISO_DEP NCI_INTERFACE_ISO_DEP 450 #define NFC_INTERFACE_NDEF NCI_INTERFACE_NDEF 451 #define NFC_INTERFACE_NFC_DEP NCI_INTERFACE_NFC_DEP 452 #define NFC_INTERFACE_LLCP_LOW NCI_INTERFACE_LLCP_LOW 453 #define NFC_INTERFACE_LLCP_HIGH NCI_INTERFACE_LLCP_HIGH 454 #define NFC_INTERFACE_VS_T2T_CE NCI_INTERFACE_VS_T2T_CE 455 #define NFC_INTERFACE_MIFARE NCI_INTERFACE_VS_MIFARE 456 typedef tNCI_INTF_TYPE tNFC_INTF_TYPE; 457 458 /********************************************** 459 * Deactivation Type 460 **********************************************/ 461 #define NFC_DEACTIVATE_TYPE_IDLE NCI_DEACTIVATE_TYPE_IDLE 462 #define NFC_DEACTIVATE_TYPE_SLEEP NCI_DEACTIVATE_TYPE_SLEEP 463 #define NFC_DEACTIVATE_TYPE_SLEEP_AF NCI_DEACTIVATE_TYPE_SLEEP_AF 464 #define NFC_DEACTIVATE_TYPE_DISCOVERY NCI_DEACTIVATE_TYPE_DISCOVERY 465 typedef uint8_t tNFC_DEACT_TYPE; 466 467 /********************************************** 468 * Deactivation Reasons 469 **********************************************/ 470 #define NFC_DEACTIVATE_REASON_DH_REQ NCI_DEACTIVATE_REASON_DH_REQ 471 #define NFC_DEACTIVATE_REASON_ENDPOINT_REQ NCI_DEACTIVATE_REASON_ENDPOINT_REQ 472 #define NFC_DEACTIVATE_REASON_RF_LINK_LOSS NCI_DEACTIVATE_REASON_RF_LINK_LOSS 473 #define NFC_DEACTIVATE_REASON_NFCB_BAD_AFI NCI_DEACTIVATE_REASON_NFCB_BAD_AFI 474 #define NFC_DEACTIVATE_REASON_DH_REQ_FAILED NCI_DEACTIVATE_REASON_DH_REQ_FAILED 475 typedef uint8_t tNFC_DEACT_REASON; 476 477 /* the data type associated with NFC_RF_FIELD_REVT */ 478 typedef struct { 479 tNFC_STATUS status; /* The event status - place holder. */ 480 tNFC_RF_STS rf_field; /* RF Field Status */ 481 } tNFC_RF_FIELD_REVT; 482 483 #define NFC_MAX_APP_DATA_LEN 40 484 typedef struct { 485 uint8_t len_aid; /* length of application id */ 486 uint8_t aid[NFC_MAX_AID_LEN]; /* application id */ 487 } tNFC_AID; 488 typedef struct { 489 uint8_t len_aid; /* length of application id */ 490 uint8_t aid[NFC_MAX_AID_LEN]; /* application id */ 491 uint8_t len_data; /* len of application data */ 492 uint8_t data[NFC_MAX_APP_DATA_LEN]; /* application data */ 493 } tNFC_APP_INIT; 494 495 /* ISO 7816-4 SELECT command */ 496 #define NFC_EE_TRIG_SELECT NCI_EE_TRIG_7816_SELECT 497 /* RF Protocol changed */ 498 #define NFC_EE_TRIG_RF_PROTOCOL NCI_EE_TRIG_RF_PROTOCOL 499 /* RF Technology changed */ 500 #define NFC_EE_TRIG_RF_TECHNOLOGY NCI_EE_TRIG_RF_TECHNOLOGY 501 /* Application initiation */ 502 #define NFC_EE_TRIG_APP_INIT NCI_EE_TRIG_APP_INIT 503 typedef uint8_t tNFC_EE_TRIGGER; 504 typedef struct { 505 tNFC_EE_TRIGGER trigger; /* the trigger of this event */ 506 union { 507 tNFC_PROTOCOL protocol; 508 tNFC_RF_TECH technology; 509 tNFC_AID aid; 510 tNFC_APP_INIT app_init; 511 } param; /* Discovery Type specific parameters */ 512 } tNFC_ACTION_DATA; 513 514 /* the data type associated with NFC_EE_ACTION_REVT */ 515 typedef struct { 516 tNFC_STATUS status; /* The event status - place holder */ 517 uint8_t nfcee_id; /* NFCEE ID */ 518 tNFC_ACTION_DATA act_data; /* data associated /w the action */ 519 } tNFC_EE_ACTION_REVT; 520 521 #define NFC_EE_DISC_OP_ADD 0 522 #define NFC_EE_DISC_OP_REMOVE 1 523 typedef uint8_t tNFC_EE_DISC_OP; 524 typedef struct { 525 tNFC_EE_DISC_OP op; /* add or remove this entry */ 526 uint8_t nfcee_id; /* NFCEE ID */ 527 tNFC_RF_TECH_N_MODE tech_n_mode; /* Discovery Technology and Mode */ 528 tNFC_PROTOCOL protocol; /* NFC protocol */ 529 } tNFC_EE_DISCOVER_INFO; 530 531 #ifndef NFC_MAX_EE_DISC_ENTRIES 532 #define NFC_MAX_EE_DISC_ENTRIES 6 533 #endif 534 /* T, L, V(NFCEE ID, TechnMode, Protocol) */ 535 #define NFC_EE_DISCOVER_ENTRY_LEN 5 536 #define NFC_EE_DISCOVER_INFO_LEN 3 /* NFCEE ID, TechnMode, Protocol */ 537 /* the data type associated with NFC_EE_DISCOVER_REQ_REVT */ 538 typedef struct { 539 tNFC_STATUS status; /* The event status - place holder */ 540 uint8_t num_info; /* number of entries in info[] */ 541 tNFC_EE_DISCOVER_INFO 542 info[NFC_MAX_EE_DISC_ENTRIES]; /* discovery request from NFCEE */ 543 } tNFC_EE_DISCOVER_REQ_REVT; 544 545 typedef union { 546 tNFC_STATUS status; /* The event status. */ 547 tNFC_ENABLE_REVT enable; 548 tNFC_SET_CONFIG_REVT set_config; 549 tNFC_GET_CONFIG_REVT get_config; 550 tNFC_NFCEE_DISCOVER_REVT nfcee_discover; 551 tNFC_NFCEE_INFO_REVT nfcee_info; 552 tNFC_NFCEE_MODE_SET_REVT mode_set; 553 tNFC_RF_FIELD_REVT rf_field; 554 tNFC_STATUS cfg_routing; 555 tNFC_GET_ROUTING_REVT get_routing; 556 tNFC_EE_ACTION_REVT ee_action; 557 tNFC_EE_DISCOVER_REQ_REVT ee_discover_req; 558 void* p_vs_evt_data; 559 } tNFC_RESPONSE; 560 561 /************************************* 562 ** RESPONSE Callback Functions 563 **************************************/ 564 typedef void(tNFC_RESPONSE_CBACK)(tNFC_RESPONSE_EVT event, 565 tNFC_RESPONSE* p_data); 566 567 /* The events reported on tNFC_VS_CBACK */ 568 /* The event is (NCI_RSP_BIT|oid) for response and (NCI_NTF_BIT|oid) for 569 * notification*/ 570 571 typedef uint8_t tNFC_VS_EVT; 572 573 /************************************* 574 ** Proprietary (Vendor Specific) Callback Functions 575 **************************************/ 576 typedef void(tNFC_VS_CBACK)(tNFC_VS_EVT event, uint16_t data_len, 577 uint8_t* p_data); 578 579 /* the events reported on tNFC_DISCOVER_CBACK */ 580 enum { 581 NFC_START_DEVT = NFC_FIRST_DEVT, /* Status of NFC_DiscoveryStart */ 582 NFC_MAP_DEVT, /* Status of NFC_DiscoveryMap */ 583 NFC_RESULT_DEVT, /* The responses from remote device */ 584 NFC_SELECT_DEVT, /* Status of NFC_DiscoverySelect */ 585 NFC_ACTIVATE_DEVT, /* RF interface is activated */ 586 NFC_DEACTIVATE_DEVT /* Status of RF deactivation */ 587 }; 588 typedef uint16_t tNFC_DISCOVER_EVT; 589 590 /* the data type associated with NFC_START_DEVT */ 591 typedef tNFC_STATUS tNFC_START_DEVT; 592 593 typedef tNCI_RF_PA_PARAMS tNFC_RF_PA_PARAMS; 594 #define NFC_MAX_SENSB_RES_LEN NCI_MAX_SENSB_RES_LEN 595 #define NFC_NFCID0_MAX_LEN 4 596 typedef struct { 597 uint8_t sensb_res_len; /* Length of SENSB_RES Response (Byte 2 - Byte 12 or 598 13) Available after Technology Detection */ 599 uint8_t sensb_res[NFC_MAX_SENSB_RES_LEN]; /* SENSB_RES Response (ATQ) */ 600 uint8_t nfcid0[NFC_NFCID0_MAX_LEN]; 601 } tNFC_RF_PB_PARAMS; 602 603 #define NFC_MAX_SENSF_RES_LEN NCI_MAX_SENSF_RES_LEN 604 #define NFC_NFCID2_LEN NCI_NFCID2_LEN 605 typedef struct { 606 uint8_t bit_rate; /* NFC_BIT_RATE_212 or NFC_BIT_RATE_424 */ 607 uint8_t sensf_res_len; /* Length of SENSF_RES Response (Byte 2 - Byte 17 or 608 19) Available after Technology Detection */ 609 uint8_t sensf_res[NFC_MAX_SENSF_RES_LEN]; /* SENSB_RES Response */ 610 uint8_t nfcid2[NFC_NFCID2_LEN]; /* NFCID2 generated by the Local NFCC for 611 NFC-DEP Protocol.Available for Frame 612 Interface */ 613 uint8_t mrti_check; 614 uint8_t mrti_update; 615 } tNFC_RF_PF_PARAMS; 616 617 typedef tNCI_RF_LF_PARAMS tNFC_RF_LF_PARAMS; 618 619 #define NFC_ISO15693_UID_LEN 8 620 typedef struct { 621 uint8_t flag; 622 uint8_t dsfid; 623 uint8_t uid[NFC_ISO15693_UID_LEN]; 624 } tNFC_RF_PISO15693_PARAMS; 625 626 #ifndef NFC_KOVIO_MAX_LEN 627 #define NFC_KOVIO_MAX_LEN 32 628 #endif 629 typedef struct { 630 uint8_t uid_len; 631 uint8_t uid[NFC_KOVIO_MAX_LEN]; 632 } tNFC_RF_PKOVIO_PARAMS; 633 634 typedef tNCI_RF_ACM_P_PARAMS tNFC_RF_ACM_P_PARAMS; 635 636 typedef union { 637 tNFC_RF_PA_PARAMS pa; 638 tNFC_RF_PB_PARAMS pb; 639 tNFC_RF_PF_PARAMS pf; 640 tNFC_RF_LF_PARAMS lf; 641 tNFC_RF_PISO15693_PARAMS pi93; 642 tNFC_RF_PKOVIO_PARAMS pk; 643 tNFC_RF_ACM_P_PARAMS acm_p; 644 } tNFC_RF_TECH_PARAMU; 645 646 typedef struct { 647 tNFC_DISCOVERY_TYPE mode; 648 tNFC_RF_TECH_PARAMU param; 649 } tNFC_RF_TECH_PARAMS; 650 651 /* the data type associated with NFC_RESULT_DEVT */ 652 typedef struct { 653 tNFC_STATUS status; /* The event status - place holder. */ 654 uint8_t rf_disc_id; /* RF Discovery ID */ 655 uint8_t protocol; /* supported protocol */ 656 tNFC_RF_TECH_PARAMS rf_tech_param; /* RF technology parameters */ 657 uint8_t more; /* 0: last, 1: last (limit), 2: more */ 658 } tNFC_RESULT_DEVT; 659 660 /* the data type associated with NFC_SELECT_DEVT */ 661 typedef tNFC_STATUS tNFC_SELECT_DEVT; 662 663 /* the data type associated with NFC_STOP_DEVT */ 664 typedef tNFC_STATUS tNFC_STOP_DEVT; 665 666 #define NFC_MAX_ATS_LEN NCI_MAX_ATS_LEN 667 #define NFC_MAX_HIS_BYTES_LEN NCI_MAX_HIS_BYTES_LEN 668 #define NFC_MAX_GEN_BYTES_LEN NCI_MAX_GEN_BYTES_LEN 669 670 typedef struct { 671 uint8_t ats_res_len; /* Length of ATS RES */ 672 uint8_t ats_res[NFC_MAX_ATS_LEN]; /* ATS RES */ 673 bool nad_used; /* NAD is used or not */ 674 uint8_t fwi; /* Frame Waiting time Integer */ 675 uint8_t sfgi; /* Start-up Frame Guard time Integer*/ 676 uint8_t his_byte_len; /* len of historical bytes */ 677 uint8_t his_byte[NFC_MAX_HIS_BYTES_LEN]; /* historical bytes */ 678 } tNFC_INTF_PA_ISO_DEP; 679 680 typedef struct { uint8_t rats; /* RATS */ } tNFC_INTF_LA_ISO_DEP; 681 682 typedef struct { 683 uint8_t atr_res_len; /* Length of ATR_RES */ 684 uint8_t atr_res[NFC_MAX_ATS_LEN]; /* ATR_RES (Byte 3 - Byte 17+n) */ 685 uint8_t max_payload_size; /* 64, 128, 192 or 254 */ 686 uint8_t gen_bytes_len; /* len of general bytes */ 687 uint8_t gen_bytes[NFC_MAX_GEN_BYTES_LEN]; /* general bytes */ 688 uint8_t 689 waiting_time; /* WT -> Response Waiting Time RWT = (256 x 16/fC) x 2WT */ 690 } tNFC_INTF_PA_NFC_DEP; 691 692 /* Note: keep tNFC_INTF_PA_NFC_DEP data member in the same order as 693 * tNFC_INTF_LA_NFC_DEP */ 694 typedef struct { 695 uint8_t atr_req_len; /* Length of ATR_REQ */ 696 uint8_t atr_req[NFC_MAX_ATS_LEN]; /* ATR_REQ (Byte 3 - Byte 18+n) */ 697 uint8_t max_payload_size; /* 64, 128, 192 or 254 */ 698 uint8_t gen_bytes_len; /* len of general bytes */ 699 uint8_t gen_bytes[NFC_MAX_GEN_BYTES_LEN]; /* general bytes */ 700 } tNFC_INTF_LA_NFC_DEP; 701 typedef tNFC_INTF_LA_NFC_DEP tNFC_INTF_LF_NFC_DEP; 702 typedef tNFC_INTF_PA_NFC_DEP tNFC_INTF_PF_NFC_DEP; 703 704 #define NFC_MAX_ATTRIB_LEN NCI_MAX_ATTRIB_LEN 705 706 typedef struct { 707 uint8_t attrib_res_len; /* Length of ATTRIB RES */ 708 uint8_t attrib_res[NFC_MAX_ATTRIB_LEN]; /* ATTRIB RES */ 709 uint8_t hi_info_len; /* len of Higher layer Info */ 710 uint8_t hi_info[NFC_MAX_GEN_BYTES_LEN]; /* Higher layer Info */ 711 uint8_t mbli; /* Maximum buffer length. */ 712 } tNFC_INTF_PB_ISO_DEP; 713 714 typedef struct { 715 uint8_t attrib_req_len; /* Length of ATTRIB REQ */ 716 uint8_t attrib_req[NFC_MAX_ATTRIB_LEN]; /* ATTRIB REQ (Byte 2 - 10+k)*/ 717 uint8_t hi_info_len; /* len of Higher layer Info */ 718 uint8_t hi_info[NFC_MAX_GEN_BYTES_LEN]; /* Higher layer Info */ 719 uint8_t nfcid0[NFC_NFCID0_MAX_LEN]; /* NFCID0 */ 720 } tNFC_INTF_LB_ISO_DEP; 721 722 #ifndef NFC_MAX_RAW_PARAMS 723 #define NFC_MAX_RAW_PARAMS 16 724 #endif 725 #define NFC_MAX_RAW_PARAMS 16 726 typedef struct { 727 uint8_t param_len; 728 uint8_t param[NFC_MAX_RAW_PARAMS]; 729 } tNFC_INTF_FRAME; 730 731 typedef struct { 732 tNFC_INTF_TYPE type; /* Interface Type 1 Byte See Table 67 */ 733 union { 734 tNFC_INTF_LA_ISO_DEP la_iso; 735 tNFC_INTF_PA_ISO_DEP pa_iso; 736 tNFC_INTF_LB_ISO_DEP lb_iso; 737 tNFC_INTF_PB_ISO_DEP pb_iso; 738 tNFC_INTF_LA_NFC_DEP la_nfc; 739 tNFC_INTF_PA_NFC_DEP pa_nfc; 740 tNFC_INTF_LF_NFC_DEP lf_nfc; 741 tNFC_INTF_PF_NFC_DEP pf_nfc; 742 tNFC_INTF_FRAME frame; 743 } intf_param; /* Activation Parameters 0 - n Bytes */ 744 } tNFC_INTF_PARAMS; 745 746 /* the data type associated with NFC_ACTIVATE_DEVT */ 747 typedef struct { 748 uint8_t rf_disc_id; /* RF Discovery ID */ 749 tNFC_PROTOCOL protocol; /* supported protocol */ 750 tNFC_RF_TECH_PARAMS rf_tech_param; /* RF technology parameters */ 751 tNFC_DISCOVERY_TYPE data_mode; /* for future Data Exchange */ 752 tNFC_BIT_RATE tx_bitrate; /* Data Exchange Tx Bitrate */ 753 tNFC_BIT_RATE rx_bitrate; /* Data Exchange Rx Bitrate */ 754 tNFC_INTF_PARAMS intf_param; /* interface type and params*/ 755 } tNFC_ACTIVATE_DEVT; 756 757 /* the data type associated with NFC_DEACTIVATE_DEVT and NFC_DEACTIVATE_CEVT */ 758 typedef struct { 759 tNFC_STATUS status; /* The event status. */ 760 tNFC_DEACT_TYPE type; /* De-activate type */ 761 bool is_ntf; /* TRUE, if deactivate notif*/ 762 tNFC_DEACT_REASON reason; /* De-activate reason */ 763 } tNFC_DEACTIVATE_DEVT; 764 765 typedef union { 766 tNFC_STATUS status; /* The event status. */ 767 tNFC_START_DEVT start; 768 tNFC_RESULT_DEVT result; 769 tNFC_SELECT_DEVT select; 770 tNFC_STOP_DEVT stop; 771 tNFC_ACTIVATE_DEVT activate; 772 tNFC_DEACTIVATE_DEVT deactivate; 773 } tNFC_DISCOVER; 774 775 /* Min TR0 indicates to tag the min delay before responding after the end of 776 * command */ 777 #define NFC_RF_PARAM_MIN_TR0_DEFAULT 0x00 778 #define NFC_RF_PARAM_MIN_TR0_48X 0x01 /* 48 x 16/fc */ 779 #define NFC_RF_PARAM_MIN_TR0_16X 0x02 /* 16 x 16/fc */ 780 781 /* Min TR1 indicates to tag the min delay between subcarrier modulation and data 782 * transmission */ 783 #define NFC_RF_PARAM_MIN_TR1_DEFAULT 0x00 784 #define NFC_RF_PARAM_MIN_TR1_64X 0x01 /* 64 x 16/fc */ 785 #define NFC_RF_PARAM_MIN_TR1_16X 0x02 /* 16 x 16/fc */ 786 787 /* Min TR2 indicates to RW the min delay between EoS of tag and SoS of RW */ 788 #define NFC_RF_PARAM_MIN_TR2_1792 0x00 /* 1792/fc (10etu + 32/fc) */ 789 #define NFC_RF_PARAM_MIN_TR2_3328 0x01 /* 3328/fc (10etu + 128/fc) */ 790 #define NFC_RF_PARAM_MIN_TR2_5376 0x02 /* 5376/fc (10etu + 256/fc) */ 791 #define NFC_RF_PARAM_MIN_TR2_9472 0x03 /* 9472/fc (10etu + 512/fc) */ 792 793 #define NFC_RF_PARAM_EOS_REQUIRED 0x00 /* EoS required */ 794 #define NFC_RF_PARAM_EOS_NOT_REQUIRED 0x01 /* EoS not required */ 795 796 #define NFC_RF_PARAM_SOS_REQUIRED 0x00 /* SoS required */ 797 #define NFC_RF_PARAM_SOS_NOT_REQUIRED 0x01 /* SoS not required */ 798 799 typedef struct { 800 bool include_rf_tech_mode; /* TRUE if including RF Tech and Mode update */ 801 tNFC_RF_TECH_N_MODE rf_tech_n_mode; /* RF tech and mode */ 802 bool include_tx_bit_rate; /* TRUE if including Tx bit rate update */ 803 tNFC_BIT_RATE tx_bit_rate; /* Transmit Bit Rate */ 804 bool include_rx_bit_rate; /* TRUE if including Rx bit rate update */ 805 tNFC_BIT_RATE rx_bit_rate; /* Receive Bit Rate */ 806 bool include_nfc_b_config; /* TRUE if including NFC-B data exchange config */ 807 uint8_t min_tr0; /* Minimun TR0 */ 808 uint8_t min_tr1; /* Minimun TR1 */ 809 uint8_t suppression_eos; /* Suppression of EoS */ 810 uint8_t suppression_sos; /* Suppression of SoS */ 811 uint8_t min_tr2; /* Minimun TR1 */ 812 } tNFC_RF_COMM_PARAMS; 813 814 /************************************* 815 ** DISCOVER Callback Functions 816 **************************************/ 817 typedef void(tNFC_DISCOVER_CBACK)(tNFC_DISCOVER_EVT event, 818 tNFC_DISCOVER* p_data); 819 820 /* the events reported on tNFC_TEST_CBACK */ 821 enum { 822 NFC_LOOPBACK_TEVT = NFC_FIRST_TEVT, /* 0 Loopback test */ 823 NFC_RF_CONTROL_TEVT, /* 1 RF control Test response */ 824 NFC_RF_FIELD_DONE_TEVT /* 1 RF control Test notificatn*/ 825 }; 826 typedef uint16_t tNFC_TEST_EVT; 827 828 /* the data type associated with NFC_LOOPBACK_TEVT */ 829 typedef struct { 830 tNFC_STATUS status; /* The event status. */ 831 NFC_HDR* p_data; /* The loop back data from NFCC */ 832 } tNFC_LOOPBACK_TEVT; 833 834 /* the data type associated with NFC_RF_CONTROL_TEVT */ 835 typedef tNFC_STATUS tNFC_RF_CONTROL_TEVT; 836 837 typedef union { 838 tNFC_STATUS status; /* The event status. */ 839 tNFC_LOOPBACK_TEVT loop_back; 840 tNFC_RF_CONTROL_TEVT rf_control; 841 } tNFC_TEST; 842 843 /************************************* 844 ** TEST Callback Functions 845 **************************************/ 846 typedef void(tNFC_TEST_CBACK)(tNFC_TEST_EVT event, tNFC_TEST* p_data); 847 848 typedef tNFC_DEACTIVATE_DEVT tNFC_DEACTIVATE_CEVT; 849 typedef union { 850 tNFC_STATUS status; /* The event status. */ 851 tNFC_CONN_CREATE_CEVT conn_create; 852 tNFC_CONN_CLOSE_CEVT conn_close; 853 tNFC_DEACTIVATE_CEVT deactivate; 854 tNFC_DATA_CEVT data; 855 } tNFC_CONN; 856 857 /************************************* 858 ** Data Callback Functions 859 **************************************/ 860 typedef void(tNFC_CONN_CBACK)(uint8_t conn_id, tNFC_CONN_EVT event, 861 tNFC_CONN* p_data); 862 #define NFC_MAX_CONN_ID 15 863 #define NFC_ILLEGAL_CONN_ID 0xFF 864 /* the static connection ID for RF traffic */ 865 #define NFC_RF_CONN_ID 0 866 867 /************************************* 868 ** Status callback function 869 **************************************/ 870 typedef void(tNFC_STATUS_CBACK)(tNFC_STATUS status); 871 872 /***************************************************************************** 873 ** EXTERNAL FUNCTION DECLARATIONS 874 *****************************************************************************/ 875 #ifdef __cplusplus 876 extern "C" { 877 #endif 878 879 /******************************************************************************* 880 ** 881 ** Function NFC_Enable 882 ** 883 ** Description This function enables NFC. Prior to calling NFC_Enable: 884 ** - the NFCC must be powered up, and ready to receive 885 ** commands. 886 ** - GKI must be enabled 887 ** - NFC_TASK must be started 888 ** - NCIT_TASK must be started (if using dedicated NCI 889 ** transport) 890 ** 891 ** This function opens the NCI transport (if applicable), 892 ** resets the NFC controller, and initializes the NFC 893 ** subsystems. 894 ** 895 ** When the NFC startup procedure is completed, an 896 ** NFC_ENABLE_REVT is returned to the application using the 897 ** tNFC_RESPONSE_CBACK. 898 ** 899 ** Returns tNFC_STATUS 900 ** 901 *******************************************************************************/ 902 extern tNFC_STATUS NFC_Enable(tNFC_RESPONSE_CBACK* p_cback); 903 904 /******************************************************************************* 905 ** 906 ** Function NFC_Disable 907 ** 908 ** Description This function performs clean up routines for shutting down 909 ** NFC and closes the NCI transport (if using dedicated NCI 910 ** transport). 911 ** 912 ** When the NFC shutdown procedure is completed, an 913 ** NFC_DISABLED_REVT is returned to the application using the 914 ** tNFC_RESPONSE_CBACK. 915 ** 916 ** Returns nothing 917 ** 918 *******************************************************************************/ 919 extern void NFC_Disable(void); 920 921 /******************************************************************************* 922 ** 923 ** Function NFC_Init 924 ** 925 ** Description This function initializes control blocks for NFC 926 ** 927 ** Returns nothing 928 ** 929 *******************************************************************************/ 930 extern void NFC_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl); 931 932 /******************************************************************************* 933 ** 934 ** Function NFC_GetLmrtSize 935 ** 936 ** Description Called by application wto query the Listen Mode Routing 937 ** Table size supported by NFCC 938 ** 939 ** Returns Listen Mode Routing Table size 940 ** 941 *******************************************************************************/ 942 extern uint16_t NFC_GetLmrtSize(void); 943 944 /******************************************************************************* 945 ** 946 ** Function NFC_SetConfig 947 ** 948 ** Description This function is called to send the configuration parameter 949 ** TLV to NFCC. The response from NFCC is reported by 950 ** tNFC_RESPONSE_CBACK as NFC_SET_CONFIG_REVT. 951 ** 952 ** Parameters tlv_size - the length of p_param_tlvs. 953 ** p_param_tlvs - the parameter ID/Len/Value list 954 ** 955 ** Returns tNFC_STATUS 956 ** 957 *******************************************************************************/ 958 extern tNFC_STATUS NFC_SetConfig(uint8_t tlv_size, uint8_t* p_param_tlvs); 959 960 /******************************************************************************* 961 ** 962 ** Function NFC_GetConfig 963 ** 964 ** Description This function is called to retrieve the parameter TLV from 965 ** NFCC. The response from NFCC is reported by 966 ** tNFC_RESPONSE_CBACK as NFC_GET_CONFIG_REVT. 967 ** 968 ** Parameters num_ids - the number of parameter IDs 969 ** p_param_ids - the parameter ID list. 970 ** 971 ** Returns tNFC_STATUS 972 ** 973 *******************************************************************************/ 974 extern tNFC_STATUS NFC_GetConfig(uint8_t num_ids, uint8_t* p_param_ids); 975 976 /******************************************************************************* 977 ** 978 ** Function NFC_NfceeDiscover 979 ** 980 ** Description This function is called to enable or disable NFCEE 981 ** Discovery. The response from NFCC is reported by 982 ** tNFC_RESPONSE_CBACK as NFC_NFCEE_DISCOVER_REVT. 983 ** The notification from NFCC is reported by 984 ** tNFC_RESPONSE_CBACK as NFC_NFCEE_INFO_REVT. 985 ** 986 ** Parameters discover - 1 to enable discover, 0 to disable. 987 ** 988 ** Returns tNFC_STATUS 989 ** 990 *******************************************************************************/ 991 extern tNFC_STATUS NFC_NfceeDiscover(bool discover); 992 993 /******************************************************************************* 994 ** 995 ** Function NFC_NfceeModeSet 996 ** 997 ** Description This function is called to activate or de-activate an NFCEE 998 ** connected to the NFCC. 999 ** The response from NFCC is reported by tNFC_RESPONSE_CBACK 1000 ** as NFC_NFCEE_MODE_SET_REVT. 1001 ** 1002 ** Parameters nfcee_id - the NFCEE to activate or de-activate. 1003 ** mode - 0 to activate NFCEE, 1 to de-activate. 1004 ** 1005 ** Returns tNFC_STATUS 1006 ** 1007 *******************************************************************************/ 1008 extern tNFC_STATUS NFC_NfceeModeSet(uint8_t nfcee_id, tNFC_NFCEE_MODE mode); 1009 /******************************************************************************* 1010 ** 1011 ** Function NFC_DiscoveryMap 1012 ** 1013 ** Description This function is called to set the discovery interface 1014 ** mapping. The response from NFCC is reported by 1015 ** tNFC_DISCOVER_CBACK as. NFC_MAP_DEVT. 1016 ** 1017 ** Parameters num - the number of items in p_params. 1018 ** p_maps - the discovery interface mappings 1019 ** p_cback - the discovery callback function 1020 ** 1021 ** Returns tNFC_STATUS 1022 ** 1023 *******************************************************************************/ 1024 extern tNFC_STATUS NFC_DiscoveryMap(uint8_t num, tNFC_DISCOVER_MAPS* p_maps, 1025 tNFC_DISCOVER_CBACK* p_cback); 1026 1027 /******************************************************************************* 1028 ** 1029 ** Function NFC_DiscoveryStart 1030 ** 1031 ** Description This function is called to start Polling and/or Listening. 1032 ** The response from NFCC is reported by tNFC_DISCOVER_CBACK 1033 ** as NFC_START_DEVT. The notification from NFCC is reported by 1034 ** tNFC_DISCOVER_CBACK as NFC_RESULT_DEVT. 1035 ** 1036 ** Parameters num_params - the number of items in p_params. 1037 ** p_params - the discovery parameters 1038 ** p_cback - the discovery callback function 1039 ** 1040 ** Returns tNFC_STATUS 1041 ** 1042 *******************************************************************************/ 1043 extern tNFC_STATUS NFC_DiscoveryStart(uint8_t num_params, 1044 tNFC_DISCOVER_PARAMS* p_params, 1045 tNFC_DISCOVER_CBACK* p_cback); 1046 1047 /******************************************************************************* 1048 ** 1049 ** Function NFC_DiscoverySelect 1050 ** 1051 ** Description If tNFC_DISCOVER_CBACK reports status=NFC_MULTIPLE_PROT, 1052 ** the application needs to use this function to select the 1053 ** the logical endpoint to continue. The response from NFCC is 1054 ** reported by tNFC_DISCOVER_CBACK as NFC_SELECT_DEVT. 1055 ** 1056 ** Parameters rf_disc_id - The ID identifies the remote device. 1057 ** protocol - the logical endpoint on the remote devide 1058 ** rf_interface - the RF interface to communicate with NFCC 1059 ** 1060 ** Returns tNFC_STATUS 1061 ** 1062 *******************************************************************************/ 1063 extern tNFC_STATUS NFC_DiscoverySelect(uint8_t rf_disc_id, uint8_t protocol, 1064 uint8_t rf_interface); 1065 1066 /******************************************************************************* 1067 ** 1068 ** Function NFC_ConnCreate 1069 ** 1070 ** Description This function is called to create a logical connection with 1071 ** NFCC for data exchange. 1072 ** The response from NFCC is reported in tNFC_CONN_CBACK 1073 ** as NFC_CONN_CREATE_CEVT. 1074 ** 1075 ** Parameters dest_type - the destination type 1076 ** id - the NFCEE ID or RF Discovery ID . 1077 ** protocol - the protocol 1078 ** p_cback - the data callback function to receive data from 1079 ** NFCC 1080 ** 1081 ** Returns tNFC_STATUS 1082 ** 1083 *******************************************************************************/ 1084 extern tNFC_STATUS NFC_ConnCreate(uint8_t dest_type, uint8_t id, 1085 uint8_t protocol, tNFC_CONN_CBACK* p_cback); 1086 1087 /******************************************************************************* 1088 ** 1089 ** Function NFC_ConnClose 1090 ** 1091 ** Description This function is called to close a logical connection with 1092 ** NFCC. 1093 ** The response from NFCC is reported in tNFC_CONN_CBACK 1094 ** as NFC_CONN_CLOSE_CEVT. 1095 ** 1096 ** Parameters conn_id - the connection id. 1097 ** 1098 ** Returns tNFC_STATUS 1099 ** 1100 *******************************************************************************/ 1101 extern tNFC_STATUS NFC_ConnClose(uint8_t conn_id); 1102 1103 /******************************************************************************* 1104 ** 1105 ** Function NFC_SetStaticRfCback 1106 ** 1107 ** Description This function is called to update the data callback function 1108 ** to receive the data for the given connection id. 1109 ** 1110 ** Parameters p_cback - the connection callback function 1111 ** 1112 ** Returns Nothing 1113 ** 1114 *******************************************************************************/ 1115 extern void NFC_SetStaticRfCback(tNFC_CONN_CBACK* p_cback); 1116 1117 /******************************************************************************* 1118 ** 1119 ** Function NFC_SetReassemblyFlag 1120 ** 1121 ** Description This function is called to set if nfc will reassemble 1122 ** nci packet as much as its buffer can hold or it should not 1123 ** reassemble but forward the fragmented nci packet to layer 1124 ** above. If nci data pkt is fragmented, nfc may send multiple 1125 ** NFC_DATA_CEVT with status NFC_STATUS_CONTINUE before sending 1126 ** NFC_DATA_CEVT with status NFC_STATUS_OK based on reassembly 1127 ** configuration and reassembly buffer size 1128 ** 1129 ** Parameters reassembly - flag to indicate if nfc may reassemble or not 1130 ** 1131 ** Returns Nothing 1132 ** 1133 *******************************************************************************/ 1134 extern void NFC_SetReassemblyFlag(bool reassembly); 1135 1136 /******************************************************************************* 1137 ** 1138 ** Function NFC_SendData 1139 ** 1140 ** Description This function is called to send the given data packet 1141 ** to the connection identified by the given connection id. 1142 ** 1143 ** Parameters conn_id - the connection id. 1144 ** p_data - the data packet 1145 ** 1146 ** Returns tNFC_STATUS 1147 ** 1148 *******************************************************************************/ 1149 extern tNFC_STATUS NFC_SendData(uint8_t conn_id, NFC_HDR* p_data); 1150 1151 /******************************************************************************* 1152 ** 1153 ** Function NFC_FlushData 1154 ** 1155 ** Description This function is called to discard the tx data queue of 1156 ** the given connection id. 1157 ** 1158 ** Parameters conn_id - the connection id. 1159 ** 1160 ** Returns tNFC_STATUS 1161 ** 1162 *******************************************************************************/ 1163 extern tNFC_STATUS NFC_FlushData(uint8_t conn_id); 1164 1165 /******************************************************************************* 1166 ** 1167 ** Function NFC_Deactivate 1168 ** 1169 ** Description This function is called to stop the discovery process or 1170 ** put the listen device in sleep mode or terminate the NFC 1171 ** link. 1172 ** 1173 ** The response from NFCC is reported by tNFC_DISCOVER_CBACK 1174 ** as NFC_DEACTIVATE_DEVT. 1175 ** 1176 ** Parameters deactivate_type - NFC_DEACTIVATE_TYPE_IDLE, to IDLE mode. 1177 ** NFC_DEACTIVATE_TYPE_SLEEP to SLEEP mode. 1178 ** NFC_DEACTIVATE_TYPE_SLEEP_AF to SLEEP_AF 1179 ** mode. 1180 ** 1181 ** Returns tNFC_STATUS 1182 ** 1183 *******************************************************************************/ 1184 extern tNFC_STATUS NFC_Deactivate(tNFC_DEACT_TYPE deactivate_type); 1185 1186 /******************************************************************************* 1187 ** 1188 ** Function NFC_UpdateRFCommParams 1189 ** 1190 ** Description This function is called to update RF Communication 1191 ** parameters once the Frame RF Interface has been activated. 1192 ** 1193 ** The response from NFCC is reported by tNFC_RESPONSE_CBACK 1194 ** as NFC_RF_COMM_PARAMS_UPDATE_REVT. 1195 ** 1196 ** Returns tNFC_STATUS 1197 ** 1198 *******************************************************************************/ 1199 extern tNFC_STATUS NFC_UpdateRFCommParams(tNFC_RF_COMM_PARAMS* p_params); 1200 1201 /******************************************************************************* 1202 ** 1203 ** Function NFC_SetPowerOffSleep 1204 ** 1205 ** Description This function closes/opens transport and turns off/on NFCC. 1206 ** 1207 ** Returns tNFC_STATUS 1208 ** 1209 *******************************************************************************/ 1210 extern tNFC_STATUS NFC_SetPowerOffSleep(bool enable); 1211 1212 /******************************************************************************* 1213 ** 1214 ** Function NFC_SetPowerSubState 1215 ** 1216 ** Description This function is called to send the power sub state(screen 1217 ** state) to NFCC. The response from NFCC is reported by 1218 ** tNFC_RESPONSE_CBACK as NFC_SET_POWER_STATE_REVT. 1219 ** 1220 ** Parameters scree_state 1221 ** 1222 ** Returns tNFC_STATUS 1223 ** 1224 *******************************************************************************/ 1225 extern tNFC_STATUS NFC_SetPowerSubState(uint8_t screen_state); 1226 1227 /******************************************************************************* 1228 ** 1229 ** Function NFC_PowerCycleNFCC 1230 ** 1231 ** Description This function turns off and then on NFCC. 1232 ** 1233 ** Returns tNFC_STATUS 1234 ** 1235 *******************************************************************************/ 1236 extern tNFC_STATUS NFC_PowerCycleNFCC(void); 1237 1238 /******************************************************************************* 1239 ** 1240 ** Function NFC_SetRouting 1241 ** 1242 ** Description This function is called to configure the CE routing table. 1243 ** The response from NFCC is reported by tNFC_RESPONSE_CBACK 1244 ** as NFC_SET_ROUTING_REVT. 1245 ** 1246 ** Parameters 1247 ** 1248 ** Returns tNFC_STATUS 1249 ** 1250 *******************************************************************************/ 1251 extern tNFC_STATUS NFC_SetRouting(bool more, uint8_t num_tlv, uint8_t tlv_size, 1252 uint8_t* p_param_tlvs); 1253 1254 /******************************************************************************* 1255 ** 1256 ** Function NFC_GetRouting 1257 ** 1258 ** Description This function is called to retrieve the CE routing table 1259 ** from NFCC. The response from NFCC is reported by 1260 ** tNFC_RESPONSE_CBACK as NFC_GET_ROUTING_REVT. 1261 ** 1262 ** Returns tNFC_STATUS 1263 ** 1264 *******************************************************************************/ 1265 extern tNFC_STATUS NFC_GetRouting(void); 1266 1267 /******************************************************************************* 1268 ** 1269 ** Function NFC_RegVSCback 1270 ** 1271 ** Description This function is called to register or de-register a 1272 ** callback function to receive Proprietary NCI response and 1273 ** notification events. 1274 ** The maximum number of callback functions allowed is 1275 ** NFC_NUM_VS_CBACKS 1276 ** 1277 ** Returns tNFC_STATUS 1278 ** 1279 *******************************************************************************/ 1280 extern tNFC_STATUS NFC_RegVSCback(bool is_register, tNFC_VS_CBACK* p_cback); 1281 1282 /******************************************************************************* 1283 ** 1284 ** Function NFC_SendVsCommand 1285 ** 1286 ** Description This function is called to send the given vendor specific 1287 ** command to NFCC. The response from NFCC is reported to the 1288 ** given tNFC_VS_CBACK as (oid). 1289 ** 1290 ** Parameters oid - The opcode of the VS command. 1291 ** p_data - The parameters for the VS command 1292 ** 1293 ** Returns tNFC_STATUS 1294 ** 1295 *******************************************************************************/ 1296 extern tNFC_STATUS NFC_SendVsCommand(uint8_t oid, NFC_HDR* p_data, 1297 tNFC_VS_CBACK* p_cback); 1298 1299 /******************************************************************************* 1300 ** 1301 ** Function NFC_SendRawVsCommand 1302 ** 1303 ** Description This function is called to send the given raw command to 1304 ** NFCC. The response from NFCC is reported to the given 1305 ** tNFC_VS_CBACK. 1306 ** 1307 ** Parameters p_data - The command buffer 1308 ** 1309 ** Returns tNFC_STATUS 1310 ** 1311 *******************************************************************************/ 1312 extern tNFC_STATUS NFC_SendRawVsCommand(NFC_HDR* p_data, 1313 tNFC_VS_CBACK* p_cback); 1314 1315 /******************************************************************************* 1316 ** 1317 ** Function NFC_TestLoopback 1318 ** 1319 ** Description This function is called to send the given data packet 1320 ** to NFCC for loopback test. 1321 ** When loopback data is received from NFCC, tNFC_TEST_CBACK . 1322 ** reports a NFC_LOOPBACK_TEVT. 1323 ** 1324 ** Parameters p_data - the data packet 1325 ** 1326 ** Returns tNFC_STATUS 1327 ** 1328 *******************************************************************************/ 1329 extern tNFC_STATUS NFC_TestLoopback(NFC_HDR* p_data); 1330 1331 /******************************************************************************* 1332 ** 1333 ** Function NFC_SetTraceLevel 1334 ** 1335 ** Description This function sets the trace level for NFC. If called with 1336 ** a value of 0xFF, it simply returns the current trace level. 1337 ** 1338 ** Returns The new or current trace level 1339 ** 1340 *******************************************************************************/ 1341 extern uint8_t NFC_SetTraceLevel(uint8_t new_level); 1342 1343 /******************************************************************************* 1344 ** 1345 ** Function NFC_ISODEPNakPresCheck 1346 ** 1347 ** Description This function is called to send the ISO DEP nak presence 1348 ** check cmd to check that the remote end point in RF field. 1349 ** 1350 ** Returns tNFC_STATUS 1351 ** 1352 *******************************************************************************/ 1353 extern tNFC_STATUS NFC_ISODEPNakPresCheck(); 1354 1355 #if (APPL_DTA_MODE == TRUE) 1356 /******************************************************************************* 1357 ** 1358 ** Function nfc_ncif_getFWVersion 1359 ** 1360 ** Description This function sets the trace level for NFC. If called with 1361 ** a value of 0xFF, it simply returns the current trace level. 1362 ** 1363 ** Returns The new or current trace level 1364 ** 1365 *******************************************************************************/ 1366 extern tNFC_FW_VERSION nfc_ncif_getFWVersion(); 1367 #endif 1368 1369 #if (BT_TRACE_VERBOSE == TRUE) 1370 /******************************************************************************* 1371 ** 1372 ** Function NFC_GetStatusName 1373 ** 1374 ** Description This function returns the status name. 1375 ** 1376 ** NOTE conditionally compiled to save memory. 1377 ** 1378 ** Returns pointer to the name 1379 ** 1380 *******************************************************************************/ 1381 extern char* NFC_GetStatusName(tNFC_STATUS status); 1382 #endif 1383 1384 #ifdef __cplusplus 1385 } 1386 #endif 1387 1388 #endif /* NFC_API_H */ 1389