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