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 HCI, Broadcom's NFC 22 * application layer for mobile phones. 23 * 24 ******************************************************************************/ 25 #ifndef NFA_HCI_API_H 26 #define NFA_HCI_API_H 27 28 #include "nfa_api.h" 29 30 /***************************************************************************** 31 ** Constants and data types 32 *****************************************************************************/ 33 34 /* NFA HCI Debug constants */ 35 #define NFA_HCI_DEBUG_DISPLAY_CB 0 36 #define NFA_HCI_DEBUG_SIM_HCI_EVENT 1 37 #define NFA_HCI_DEBUG_ENABLE_LOOPBACK 101 38 #define NFA_HCI_DEBUG_DISABLE_LOOPBACK 102 39 40 /* NFA HCI callback events */ 41 #define NFA_HCI_REGISTER_EVT \ 42 0x00 /* Application registered */ 43 /* Application deregistered */ 44 #define NFA_HCI_DEREGISTER_EVT 0x01 45 /* Retrieved gates,pipes assoc. to application */ 46 #define NFA_HCI_GET_GATE_PIPE_LIST_EVT 0x02 47 #define NFA_HCI_ALLOCATE_GATE_EVT \ 48 0x03 /* A generic gate allocated to the application */ 49 #define NFA_HCI_DEALLOCATE_GATE_EVT \ 50 0x04 /* A generic gate is released */ 51 #define NFA_HCI_CREATE_PIPE_EVT \ 52 0x05 /* Pipe is created */ 53 #define NFA_HCI_OPEN_PIPE_EVT \ 54 0x06 /* Pipe is opened / could not open */ 55 #define NFA_HCI_CLOSE_PIPE_EVT \ 56 0x07 /* Pipe is closed / could not close */ 57 #define NFA_HCI_DELETE_PIPE_EVT \ 58 0x08 /* Pipe is deleted */ 59 #define NFA_HCI_HOST_LIST_EVT \ 60 0x09 /* Received list of Host from Host controller */ 61 /* HCI subsytem initialized */ 62 #define NFA_HCI_INIT_EVT 0x0A 63 /* HCI subsytem exited */ 64 #define NFA_HCI_EXIT_EVT 0x0B 65 /* Response recvd to cmd sent on app owned pipe */ 66 #define NFA_HCI_RSP_RCVD_EVT 0x0C 67 /* Response sent on app owned pipe */ 68 #define NFA_HCI_RSP_SENT_EVT 0x0D 69 /* Command sent on app owned pipe */ 70 #define NFA_HCI_CMD_SENT_EVT 0x0E 71 /* Event sent on app owned pipe */ 72 #define NFA_HCI_EVENT_SENT_EVT 0x0F 73 /* Command received on app owned pipe */ 74 #define NFA_HCI_CMD_RCVD_EVT 0x10 75 /* Event received on app owned pipe */ 76 #define NFA_HCI_EVENT_RCVD_EVT 0x11 77 /* Registry read command sent */ 78 #define NFA_HCI_GET_REG_CMD_EVT 0x12 79 /* Registry write command sent */ 80 #define NFA_HCI_SET_REG_CMD_EVT 0x13 81 /* Received response to read registry command */ 82 #define NFA_HCI_GET_REG_RSP_EVT 0x14 83 /* Received response to write registry command */ 84 #define NFA_HCI_SET_REG_RSP_EVT 0x15 85 /* A static pipe is added */ 86 #define NFA_HCI_ADD_STATIC_PIPE_EVT 0x16 87 88 typedef uint8_t tNFA_HCI_EVT; 89 90 /* Max application name length */ 91 #define NFA_MAX_HCI_APP_NAME_LEN 0x10 92 /* Max HCI command length */ 93 #define NFA_MAX_HCI_CMD_LEN 255 94 /* Max HCI event length */ 95 #define NFA_MAX_HCI_RSP_LEN 255 96 /* Max HCI event length */ 97 #define NFA_MAX_HCI_EVENT_LEN 260 98 /* Max HCI data length */ 99 #define NFA_MAX_HCI_DATA_LEN 260 100 101 /* NFA HCI PIPE states */ 102 #define NFA_HCI_PIPE_CLOSED 0x00 /* Pipe is closed */ 103 #define NFA_HCI_PIPE_OPENED 0x01 /* Pipe is opened */ 104 105 typedef uint8_t tNFA_HCI_PIPE_STATE; 106 /* Dynamic pipe control block */ 107 typedef struct { 108 uint8_t pipe_id; /* Pipe ID */ 109 tNFA_HCI_PIPE_STATE pipe_state; /* State of the Pipe */ 110 uint8_t local_gate; /* local gate id */ 111 uint8_t dest_host; /* Peer host to which this pipe is connected */ 112 uint8_t dest_gate; /* Peer gate to which this pipe is connected */ 113 } tNFA_HCI_PIPE_INFO; 114 115 /* Data for NFA_HCI_REGISTER_EVT */ 116 typedef struct { 117 tNFA_STATUS status; /* Status of registration */ 118 tNFA_HANDLE hci_handle; /* Handle assigned to the application */ 119 uint8_t num_pipes; /* Number of dynamic pipes exist for the application */ 120 uint8_t num_gates; /* Number of generic gates exist for the application */ 121 } tNFA_HCI_REGISTER; 122 123 /* Data for NFA_HCI_DEREGISTER_EVT */ 124 typedef struct { 125 tNFA_STATUS status; /* Status of deregistration */ 126 } tNFA_HCI_DEREGISTER; 127 128 /* Data for NFA_HCI_GET_GATE_PIPE_LIST_EVT */ 129 typedef struct { 130 tNFA_STATUS status; 131 uint8_t num_pipes; /* Number of dynamic pipes exist for the application */ 132 tNFA_HCI_PIPE_INFO 133 pipe[NFA_HCI_MAX_PIPE_CB]; /* List of pipe created for the application */ 134 uint8_t num_gates; /* Number of generic gates exist for the application */ 135 uint8_t gate[NFA_HCI_MAX_GATE_CB]; /* List of generic gates allocated to the 136 application */ 137 uint8_t num_uicc_created_pipes; /* Number of pipes created by UICC host */ 138 tNFA_HCI_PIPE_INFO uicc_created_pipe 139 [NFA_HCI_MAX_PIPE_CB]; /* Pipe information of the UICC created pipe */ 140 } tNFA_HCI_GET_GATE_PIPE_LIST; 141 142 /* Data for NFA_HCI_ALLOCATE_GATE_EVT */ 143 typedef struct { 144 tNFA_STATUS status; /* Status of response to allocate gate request */ 145 uint8_t gate; /* The gate allocated to the application */ 146 } tNFA_HCI_ALLOCATE_GATE; 147 148 /* Data for NFA_HCI_DEALLOCATE_GATE_EVT */ 149 typedef struct { 150 tNFA_STATUS status; /* Status of response to deallocate gate request */ 151 uint8_t gate; /* The gate deallocated from the application */ 152 } tNFA_HCI_DEALLOCATE_GATE; 153 154 /* Data for NFA_HCI_CREATE_PIPE_EVT */ 155 typedef struct { 156 tNFA_STATUS status; /* Status of creating dynamic pipe for the application */ 157 uint8_t pipe; /* The pipe created for the application */ 158 uint8_t 159 source_gate; /* DH host gate to which the one end of pipe is attached */ 160 uint8_t 161 dest_host; /* Destination host whose gate is the other end of the pipe is 162 attached to */ 163 uint8_t dest_gate; /* Destination host gate to which the other end of pipe is 164 attached */ 165 } tNFA_HCI_CREATE_PIPE; 166 167 /* Data for NFA_HCI_OPEN_PIPE_EVT */ 168 typedef struct { 169 tNFA_STATUS status; /* Status of open pipe operation */ 170 uint8_t pipe; /* The dynamic pipe for open operation */ 171 } tNFA_HCI_OPEN_PIPE; 172 173 /* Data for NFA_HCI_CLOSE_PIPE_EVT */ 174 typedef struct { 175 tNFA_STATUS status; /* Status of close pipe operation */ 176 uint8_t pipe; /* The dynamic pipe for close operation */ 177 } tNFA_HCI_CLOSE_PIPE; 178 179 /* Data for NFA_HCI_DELETE_PIPE_EVT */ 180 typedef struct { 181 tNFA_STATUS status; /* Status of delete pipe operation */ 182 uint8_t pipe; /* The dynamic pipe for delete operation */ 183 } tNFA_HCI_DELETE_PIPE; 184 185 /* Data for NFA_HCI_HOST_LIST_EVT */ 186 typedef struct { 187 tNFA_STATUS status; /* Status og get host list operation */ 188 uint8_t num_hosts; /* Number of hosts in the host network */ 189 uint8_t 190 host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* List of host in the host network */ 191 } tNFA_HCI_HOST_LIST; 192 193 /* Data for NFA_HCI_RSP_RCVD_EVT */ 194 typedef struct { 195 tNFA_STATUS status; /* Status of RSP to HCP CMD sent */ 196 uint8_t pipe; /* The pipe on which HCP packet is exchanged */ 197 uint8_t rsp_code; /* Response id */ 198 uint16_t rsp_len; /* Response parameter length */ 199 uint8_t rsp_data[NFA_MAX_HCI_RSP_LEN]; /* Response received */ 200 } tNFA_HCI_RSP_RCVD; 201 202 /* Data for NFA_HCI_EVENT_RCVD_EVT */ 203 typedef struct { 204 tNFA_STATUS status; /* Status of Event received */ 205 uint8_t pipe; /* The pipe on which HCP EVT packet is received */ 206 uint8_t evt_code; /* HCP EVT id */ 207 uint16_t evt_len; /* HCP EVT parameter length */ 208 uint8_t* p_evt_buf; /* HCP EVT Parameter */ 209 } tNFA_HCI_EVENT_RCVD; 210 211 /* Data for NFA_HCI_CMD_RCVD_EVT */ 212 typedef struct { 213 tNFA_STATUS status; /* Status of Command received */ 214 uint8_t pipe; /* The pipe on which HCP CMD packet is received */ 215 uint8_t cmd_code; /* HCP CMD id */ 216 uint16_t cmd_len; /* HCP CMD parameter length */ 217 uint8_t cmd_data[NFA_MAX_HCI_CMD_LEN]; /* HCP CMD Parameter */ 218 } tNFA_HCI_CMD_RCVD; 219 220 /* Data for NFA_HCI_INIT_EVT */ 221 typedef struct { 222 tNFA_STATUS status; /* Status of Enabling HCI Network */ 223 } tNFA_HCI_INIT; 224 225 /* Data for NFA_HCI_EXIT_EVT */ 226 typedef struct { 227 tNFA_STATUS status; /* Status of Disabling HCI Network */ 228 } tNFA_HCI_EXIT; 229 230 /* Data for NFA_HCI_RSP_SENT_EVT */ 231 typedef struct { 232 tNFA_STATUS status; /* Status of HCP response send operation */ 233 } tNFA_HCI_RSP_SENT; 234 235 /* Data for NFA_HCI_CMD_SENT_EVT */ 236 typedef struct { 237 tNFA_STATUS status; /* Status of Command send operation */ 238 } tNFA_HCI_CMD_SENT; 239 240 /* Data for NFA_HCI_EVENT_SENT_EVT */ 241 typedef struct { 242 tNFA_STATUS status; /* Status of Event send operation */ 243 } tNFA_HCI_EVENT_SENT; 244 245 /* Data for NFA_HCI_ADD_STATIC_PIPE_EVT */ 246 typedef struct { 247 tNFA_STATUS status; /* Status of adding proprietary pipe */ 248 } tNFA_HCI_ADD_STATIC_PIPE_EVT; 249 250 /* data type for all registry-related events */ 251 typedef struct { 252 tNFA_STATUS status; /* Status of Registry operation */ 253 uint8_t pipe; /* Pipe on whose registry is of interest */ 254 uint8_t index; /* Index of the registry operated */ 255 uint8_t data_len; /* length of the registry parameter */ 256 uint8_t reg_data[NFA_MAX_HCI_DATA_LEN]; /* Registry parameter */ 257 } tNFA_HCI_REGISTRY; 258 259 /* Union of all hci callback structures */ 260 typedef union { 261 tNFA_HCI_REGISTER hci_register; /* NFA_HCI_REGISTER_EVT */ 262 tNFA_HCI_DEREGISTER hci_deregister; /* NFA_HCI_DEREGISTER_EVT */ 263 tNFA_HCI_GET_GATE_PIPE_LIST gates_pipes; /* NFA_HCI_GET_GATE_PIPE_LIST_EVT */ 264 tNFA_HCI_ALLOCATE_GATE allocated; /* NFA_HCI_ALLOCATE_GATE_EVT */ 265 tNFA_HCI_DEALLOCATE_GATE deallocated; /* NFA_HCI_DEALLOCATE_GATE_EVT */ 266 tNFA_HCI_CREATE_PIPE created; /* NFA_HCI_CREATE_PIPE_EVT */ 267 tNFA_HCI_OPEN_PIPE opened; /* NFA_HCI_OPEN_PIPE_EVT */ 268 tNFA_HCI_CLOSE_PIPE closed; /* NFA_HCI_CLOSE_PIPE_EVT */ 269 tNFA_HCI_DELETE_PIPE deleted; /* NFA_HCI_DELETE_PIPE_EVT */ 270 tNFA_HCI_HOST_LIST hosts; /* NFA_HCI_HOST_LIST_EVT */ 271 tNFA_HCI_RSP_RCVD rsp_rcvd; /* NFA_HCI_RSP_RCVD_EVT */ 272 tNFA_HCI_RSP_SENT rsp_sent; /* NFA_HCI_RSP_SENT_EVT */ 273 tNFA_HCI_CMD_SENT cmd_sent; /* NFA_HCI_CMD_SENT_EVT */ 274 tNFA_HCI_EVENT_SENT evt_sent; /* NFA_HCI_EVENT_SENT_EVT */ 275 tNFA_HCI_CMD_RCVD cmd_rcvd; /* NFA_HCI_CMD_RCVD_EVT */ 276 tNFA_HCI_EVENT_RCVD rcvd_evt; /* NFA_HCI_EVENT_RCVD_EVT */ 277 tNFA_STATUS status; /* status of api command request */ 278 tNFA_HCI_REGISTRY registry; /* all registry-related events - 279 NFA_HCI_GET_REG_CMD_EVT, 280 NFA_HCI_SET_REG_CMD_EVT, 281 NFA_HCI_GET_REG_RSP_EVT, 282 NFA_HCI_SET_REG_RSP_EVT */ 283 tNFA_HCI_INIT hci_init; /* NFA_HCI_INIT_EVT */ 284 tNFA_HCI_EXIT hci_exit; /* NFA_HCI_EXIT_EVT */ 285 tNFA_HCI_ADD_STATIC_PIPE_EVT pipe_added; /* NFA_HCI_ADD_STATIC_PIPE_EVT */ 286 } tNFA_HCI_EVT_DATA; 287 288 /* NFA HCI callback */ 289 typedef void(tNFA_HCI_CBACK)(tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA* p_data); 290 291 /***************************************************************************** 292 ** External Function Declarations 293 *****************************************************************************/ 294 #ifdef __cplusplus 295 extern "C" { 296 #endif 297 298 /******************************************************************************* 299 ** 300 ** Function NFA_HciRegister 301 ** 302 ** Description This function will register an application with hci and 303 ** returns an application handle and provides a mechanism to 304 ** register a callback with HCI to receive NFA HCI event 305 ** notification. When the application is registered (or if an 306 ** error occurs), the app will be notified with 307 ** NFA_HCI_REGISTER_EVT. Previous session information 308 ** including allocated gates, created pipes and pipes states 309 ** will be returned as part of tNFA_HCI_REGISTER data. 310 ** 311 ** Returns NFA_STATUS_OK if successfully initiated 312 ** NFA_STATUS_FAILED otherwise 313 ** 314 *******************************************************************************/ 315 extern tNFA_STATUS NFA_HciRegister(char* p_app_name, tNFA_HCI_CBACK* p_cback, 316 bool b_send_conn_evts); 317 318 /******************************************************************************* 319 ** 320 ** Function NFA_HciGetGateAndPipeList 321 ** 322 ** Description This function will retrieve the list of gates allocated to 323 ** the application and list of dynamic pipes created for the 324 ** application. The app will be notified with 325 ** NFA_HCI_GET_GATE_PIPE_LIST_EVT. List of allocated dynamic 326 ** gates to the application and list of pipes created by the 327 ** application will be returned as part of 328 ** tNFA_HCI_GET_GATE_PIPE_LIST data. 329 ** 330 ** Returns NFA_STATUS_OK if successfully initiated 331 ** NFA_STATUS_FAILED otherwise 332 ** 333 *******************************************************************************/ 334 extern tNFA_STATUS NFA_HciGetGateAndPipeList(tNFA_HANDLE hci_handle); 335 336 /******************************************************************************* 337 ** 338 ** Function NFA_HciDeregister 339 ** 340 ** Description This function is called to deregister an application 341 ** from HCI. The app will be notified by NFA_HCI_DEREGISTER_EVT 342 ** after deleting all the pipes owned by the app and 343 ** deallocating all the gates allocated to the app or if an 344 ** error occurs. The app can release the buffer provided for 345 ** collecting long APDUs after receiving 346 ** NFA_HCI_DEREGISTER_EVT. Even if deregistration fails, the 347 ** app has to register again to provide a new cback function 348 ** and event buffer for receiving long APDUs. 349 ** 350 ** Returns NFA_STATUS_OK if the application is deregistered 351 ** successfully 352 ** NFA_STATUS_FAILED otherwise 353 ** 354 *******************************************************************************/ 355 extern tNFA_STATUS NFA_HciDeregister(char* p_app_name); 356 357 /******************************************************************************* 358 ** 359 ** Function NFA_HciAllocGate 360 ** 361 ** Description This function will allocate the gate if any specified or an 362 ** available generic gate for the app to provide an entry point 363 ** for a particular service to other host or to establish 364 ** communication with other host. When the gate is 365 ** allocated (or if an error occurs), the app will be notified 366 ** with NFA_HCI_ALLOCATE_GATE_EVT with the gate id. The 367 ** allocated Gate information will be stored in non volatile 368 ** memory. 369 ** 370 ** Returns NFA_STATUS_OK if this API started 371 ** NFA_STATUS_FAILED if no generic gate is available 372 ** 373 *******************************************************************************/ 374 extern tNFA_STATUS NFA_HciAllocGate(tNFA_HANDLE hci_handle, uint8_t gate); 375 376 /******************************************************************************* 377 ** 378 ** Function NFA_HciDeallocGate 379 ** 380 ** Description This function will release the specified gate that was 381 ** previously allocated to the application. When the generic 382 ** gate is released (or if an error occurs), the app will be 383 ** notified with NFA_HCI_DEALLOCATE_GATE_EVT with the gate id. 384 ** The allocated Gate information will be deleted from non 385 ** volatile memory and all the associated pipes are deleted 386 ** by informing host controller. 387 ** 388 ** Returns NFA_STATUS_OK if successfully initiated 389 ** NFA_STATUS_BAD_HANDLE if handle is not valid 390 ** NFA_STATUS_FAILED otherwise 391 ** 392 *******************************************************************************/ 393 extern tNFA_STATUS NFA_HciDeallocGate(tNFA_HANDLE conn_handle, uint8_t gate); 394 395 /******************************************************************************* 396 ** 397 ** Function NFA_HciGetHostList 398 ** 399 ** Description This function will request the host controller to return the 400 ** list of hosts that are present in the host network. When 401 ** host controller responds with the host list (or if an error 402 ** occurs), the app will be notified with NFA_HCI_HOST_LIST_EVT 403 ** 404 ** Returns NFA_STATUS_OK if successfully initiated 405 ** NFA_STATUS_BAD_HANDLE if handle is not valid 406 ** NFA_STATUS_FAILED otherwise 407 ** 408 *******************************************************************************/ 409 extern tNFA_STATUS NFA_HciGetHostList(tNFA_HANDLE hci_handle); 410 411 /******************************************************************************* 412 ** 413 ** Function NFA_HciCreatePipe 414 ** 415 ** Description This function is called to create a dynamic pipe with the 416 ** specified host. When the dynamic pipe is created (or 417 ** if an error occurs), the app will be notified with 418 ** NFA_HCI_CREATE_PIPE_EVT with the pipe id. If a pipe exists 419 ** between the two gates passed as argument and if it was 420 ** created earlier by the calling application then the pipe 421 ** id of the existing pipe will be returned and a new pipe 422 ** will not be created. After successful creation of pipe, 423 ** registry entry will be created for the dynamic pipe and 424 ** all information related to the pipe will be stored in non 425 ** volatile memory. 426 ** 427 ** Returns NFA_STATUS_OK if successfully initiated 428 ** NFA_STATUS_FAILED otherwise 429 ** 430 *******************************************************************************/ 431 extern tNFA_STATUS NFA_HciCreatePipe(tNFA_HANDLE hci_handle, 432 uint8_t source_gate_id, uint8_t dest_host, 433 uint8_t dest_gate); 434 435 /******************************************************************************* 436 ** 437 ** Function NFA_HciOpenPipe 438 ** 439 ** Description This function is called to open a dynamic pipe. 440 ** When the dynamic pipe is opened (or 441 ** if an error occurs), the app will be notified with 442 ** NFA_HCI_OPEN_PIPE_EVT with the pipe id. 443 ** 444 ** Returns NFA_STATUS_OK if successfully initiated 445 ** NFA_STATUS_FAILED otherwise 446 ** 447 *******************************************************************************/ 448 extern tNFA_STATUS NFA_HciOpenPipe(tNFA_HANDLE hci_handle, uint8_t pipe); 449 450 /******************************************************************************* 451 ** 452 ** Function NFA_HciGetRegistry 453 ** 454 ** Description This function requests a peer host to return the desired 455 ** registry field value for the gate that the pipe is on. 456 ** 457 ** When the peer host responds,the app is notified with 458 ** NFA_HCI_GET_REG_RSP_EVT or 459 ** if an error occurs in sending the command the app will be 460 ** notified by NFA_HCI_CMD_SENT_EVT 461 ** 462 ** Returns NFA_STATUS_OK if successfully initiated 463 ** NFA_STATUS_FAILED otherwise 464 ** 465 *******************************************************************************/ 466 extern tNFA_STATUS NFA_HciGetRegistry(tNFA_HANDLE hci_handle, uint8_t pipe, 467 uint8_t reg_inx); 468 469 /******************************************************************************* 470 ** 471 ** Function NFA_HciSetRegistry 472 ** 473 ** Description This function requests a peer host to set the desired 474 ** registry field value for the gate that the pipe is on. 475 ** 476 ** When the peer host responds,the app is notified with 477 ** NFA_HCI_SET_REG_RSP_EVT or 478 ** if an error occurs in sending the command the app will be 479 ** notified by NFA_HCI_CMD_SENT_EVT 480 ** 481 ** Returns NFA_STATUS_OK if successfully initiated 482 ** NFA_STATUS_FAILED otherwise 483 ** 484 *******************************************************************************/ 485 extern tNFA_STATUS NFA_HciSetRegistry(tNFA_HANDLE hci_handle, uint8_t pipe, 486 uint8_t reg_inx, uint8_t data_size, 487 uint8_t* p_data); 488 489 /******************************************************************************* 490 ** 491 ** Function NFA_HciSendCommand 492 ** 493 ** Description This function is called to send a command on a pipe created 494 ** by the application. 495 ** The app will be notified by NFA_HCI_CMD_SENT_EVT if an error 496 ** occurs. 497 ** When the peer host responds,the app is notified with 498 ** NFA_HCI_RSP_RCVD_EVT 499 ** 500 ** Returns NFA_STATUS_OK if successfully initiated 501 ** NFA_STATUS_FAILED otherwise 502 ** 503 *******************************************************************************/ 504 extern tNFA_STATUS NFA_HciSendCommand(tNFA_HANDLE hci_handle, uint8_t pipe, 505 uint8_t cmd_code, uint16_t cmd_size, 506 uint8_t* p_data); 507 508 /******************************************************************************* 509 ** 510 ** Function NFA_HciSendResponse 511 ** 512 ** Description This function is called to send a response on a pipe created 513 ** by the application. 514 ** The app will be notified by NFA_HCI_RSP_SENT_EVT if an error 515 ** occurs. 516 ** 517 ** Returns NFA_STATUS_OK if successfully initiated 518 ** NFA_STATUS_FAILED otherwise 519 ** 520 *******************************************************************************/ 521 extern tNFA_STATUS NFA_HciSendResponse(tNFA_HANDLE hci_handle, uint8_t pipe, 522 uint8_t response, uint8_t data_size, 523 uint8_t* p_data); 524 525 /******************************************************************************* 526 ** 527 ** Function NFA_HciSendEvent 528 ** 529 ** Description This function is called to send any event on a pipe created 530 ** by the application. 531 ** The app will be notified by NFA_HCI_EVENT_SENT_EVT 532 ** after successfully sending the event on the specified pipe 533 ** or if an error occurs. The application should wait for this 534 ** event before releasing event buffer passed as argument. 535 ** If the app is expecting a response to the event then it can 536 ** provide response buffer for collecting the response. If it 537 ** provides a response buffer it should also provide response 538 ** timeout indicating duration validity of the response buffer. 539 ** Maximum of NFA_MAX_HCI_EVENT_LEN bytes APDU can be received 540 ** using internal buffer if no response buffer is provided by 541 ** the application. The app will be notified by 542 ** NFA_HCI_EVENT_RCVD_EVT after receiving the response event 543 ** or on timeout if app provided response buffer. 544 ** If response buffer is provided by the application, it should 545 ** wait for this event before releasing the response buffer. 546 ** 547 ** Returns NFA_STATUS_OK if successfully initiated 548 ** NFA_STATUS_FAILED otherwise 549 ** 550 *******************************************************************************/ 551 tNFA_STATUS NFA_HciSendEvent(tNFA_HANDLE hci_handle, uint8_t pipe, 552 uint8_t evt_code, uint16_t evt_size, 553 uint8_t* p_data, uint16_t rsp_size, 554 uint8_t* p_rsp_buf, uint16_t rsp_timeout); 555 556 /******************************************************************************* 557 ** 558 ** Function NFA_HciClosePipe 559 ** 560 ** Description This function is called to close a dynamic pipe. 561 ** When the dynamic pipe is closed (or 562 ** if an error occurs), the app will be notified with 563 ** NFA_HCI_CLOSE_PIPE_EVT with the pipe id. 564 ** 565 ** Returns NFA_STATUS_OK if successfully initiated 566 ** NFA_STATUS_FAILED otherwise 567 ** 568 *******************************************************************************/ 569 extern tNFA_STATUS NFA_HciClosePipe(tNFA_HANDLE hci_handle, uint8_t pipe); 570 571 /******************************************************************************* 572 ** 573 ** Function NFA_HciDeletePipe 574 ** 575 ** Description This function is called to delete a particular dynamic pipe. 576 ** When the dynamic pipe is deleted (or if an error occurs), 577 ** the app will be notified with NFA_HCI_DELETE_PIPE_EVT with 578 ** the pipe id. After successful deletion of pipe, registry 579 ** entry will be deleted for the dynamic pipe and all 580 ** information related to the pipe will be deleted from non 581 ** volatile memory. 582 ** 583 ** Returns NFA_STATUS_OK if successfully initiated 584 ** NFA_STATUS_BAD_HANDLE if handle is not valid 585 ** NFA_STATUS_FAILED otherwise 586 ** 587 *******************************************************************************/ 588 extern tNFA_STATUS NFA_HciDeletePipe(tNFA_HANDLE hci_handle, uint8_t pipe); 589 590 /******************************************************************************* 591 ** 592 ** Function NFA_HciAddStaticPipe 593 ** 594 ** Description This function is called to add a static pipe for sending 595 ** 7816 APDUs. When the static pipe is added (or if an error 596 ** occurs), the app will be notified with 597 ** NFA_HCI_ADD_STATIC_PIPE_EVT with status. 598 ** 599 ** Returns NFA_STATUS_OK if successfully initiated 600 ** NFA_STATUS_FAILED otherwise 601 ** 602 *******************************************************************************/ 603 extern tNFA_STATUS NFA_HciAddStaticPipe(tNFA_HANDLE hci_handle, uint8_t host, 604 uint8_t gate, uint8_t pipe); 605 606 /******************************************************************************* 607 ** 608 ** Function NFA_HciDebug 609 ** 610 ** Description Debug function. 611 ** 612 *******************************************************************************/ 613 extern void NFA_HciDebug(uint8_t action, uint8_t size, uint8_t* p_data); 614 615 #ifdef __cplusplus 616 } 617 #endif 618 619 #endif /* NFA_P2P_API_H */ 620