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 SNEP, Broadcom's NFC
     23  *  application layer for mobile phones.
     24  *
     25  ******************************************************************************/
     26 #ifndef NFA_SNEP_API_H
     27 #define NFA_SNEP_API_H
     28 
     29 #include "nfa_api.h"
     30 
     31 /*****************************************************************************
     32 **  Constants and data types
     33 *****************************************************************************/
     34 #define NFA_SNEP_VERSION                0x10    /* SNEP Version 1.0          */
     35 
     36 #define NFA_SNEP_REQ_CODE_CONTINUE      0x00    /* send remaining fragments         */
     37 #define NFA_SNEP_REQ_CODE_GET           0x01    /* return an NDEF message           */
     38 #define NFA_SNEP_REQ_CODE_PUT           0x02    /* accept an NDEF message           */
     39 #define NFA_SNEP_REQ_CODE_REJECT        0x7F    /* do not send remaining fragments  */
     40 
     41 #define tNFA_SNEP_REQ_CODE  UINT8
     42 
     43 #define NFA_SNEP_RESP_CODE_CONTINUE     0x80    /* continue send remaining fragments    */
     44 #define NFA_SNEP_RESP_CODE_SUCCESS      0x81    /* the operation succeeded              */
     45 #define NFA_SNEP_RESP_CODE_NOT_FOUND    0xC0    /* resource not found                   */
     46 #define NFA_SNEP_RESP_CODE_EXCESS_DATA  0xC1    /* resource exceeds data size limit     */
     47 #define NFA_SNEP_RESP_CODE_BAD_REQ      0xC2    /* malformed request not understood     */
     48 #define NFA_SNEP_RESP_CODE_NOT_IMPLM    0xE0    /* unsupported functionality requested  */
     49 #define NFA_SNEP_RESP_CODE_UNSUPP_VER   0xE1    /* unsupported protocol version         */
     50 #define NFA_SNEP_RESP_CODE_REJECT       0xFF    /* do not send remaining fragments      */
     51 
     52 #define tNFA_SNEP_RESP_CODE UINT8
     53 
     54 /* NFA SNEP callback events */
     55 #define NFA_SNEP_REG_EVT                    0x00    /* Server/client Registeration Status   */
     56 #define NFA_SNEP_ACTIVATED_EVT              0x01    /* LLCP link has been activated, client only   */
     57 #define NFA_SNEP_DEACTIVATED_EVT            0x02    /* LLCP link has been deactivated, client only */
     58 #define NFA_SNEP_CONNECTED_EVT              0x03    /* Data link has been created           */
     59 #define NFA_SNEP_GET_REQ_EVT                0x04    /* GET request from client              */
     60 #define NFA_SNEP_PUT_REQ_EVT                0x05    /* PUT request from client              */
     61 #define NFA_SNEP_GET_RESP_EVT               0x06    /* GET response from server             */
     62 #define NFA_SNEP_PUT_RESP_EVT               0x07    /* PUT response from server             */
     63 #define NFA_SNEP_DISC_EVT                   0x08    /* Failed to connect or disconnected    */
     64 
     65 #define NFA_SNEP_ALLOC_BUFF_EVT	            0x09    /* Request to allocate a buffer for NDEF*/
     66 #define NFA_SNEP_FREE_BUFF_EVT	            0x0A    /* Request to deallocate buffer for NDEF*/
     67 #define NFA_SNEP_GET_RESP_CMPL_EVT          0x0B    /* GET response sent to client          */
     68 
     69 #define NFA_SNEP_DEFAULT_SERVER_STARTED_EVT 0x0C    /* SNEP default server is started       */
     70 #define NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT 0x0D    /* SNEP default server is stopped       */
     71 
     72 typedef UINT8 tNFA_SNEP_EVT;
     73 
     74 #define NFA_SNEP_ANY_SAP         LLCP_INVALID_SAP
     75 
     76 /* Data for NFA_SNEP_REG_EVT */
     77 typedef struct
     78 {
     79     tNFA_STATUS         status;
     80     tNFA_HANDLE         reg_handle;         /* handle for registered server/client */
     81     char                service_name[LLCP_MAX_SN_LEN + 1];      /* only for server */
     82 } tNFA_SNEP_REG;
     83 
     84 /* Data for NFA_SNEP_ACTIVATED_EVT */
     85 typedef struct
     86 {
     87     tNFA_HANDLE         client_handle;      /* handle for registered client    */
     88 } tNFA_SNEP_ACTIVATED;
     89 
     90 /* Data for NFA_SNEP_DEACTIVATED_EVT */
     91 typedef tNFA_SNEP_ACTIVATED tNFA_SNEP_DEACTIVATED;
     92 
     93 /* Data for NFA_SNEP_CONNECTED_EVT */
     94 /*
     95 ** for server, new handle will be assigned for conn_handle
     96 ** for client, handle used in NFA_SnepConnect () is returned in conn_handle
     97 */
     98 typedef struct
     99 {
    100     tNFA_HANDLE         reg_handle;         /* server/client handle            */
    101     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    102 } tNFA_SNEP_CONNECT;
    103 
    104 /* Data for NFA_SNEP_GET_REQ_EVT */
    105 typedef struct
    106 {
    107     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    108     UINT32              acceptable_length;  /* acceptable length from client   */
    109     UINT32              ndef_length;        /* NDEF message length             */
    110     UINT8               *p_ndef;            /* NDEF message                    */
    111 } tNFA_SNEP_GET_REQ;
    112 
    113 /* Data for NFA_SNEP_PUT_REQ_EVT */
    114 typedef struct
    115 {
    116     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    117     UINT32              ndef_length;        /* NDEF message length             */
    118     UINT8               *p_ndef;            /* NDEF message                    */
    119 } tNFA_SNEP_PUT_REQ;
    120 
    121 /* Data for NFA_SNEP_GET_RESP_EVT */
    122 typedef struct
    123 {
    124     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    125     tNFA_SNEP_RESP_CODE resp_code;          /* response code from server       */
    126     UINT32              ndef_length;        /* NDEF message length             */
    127     UINT8               *p_ndef;            /* NDEF message                    */
    128 } tNFA_SNEP_GET_RESP;
    129 
    130 /* Data for NFA_SNEP_PUT_RESP_EVT */
    131 typedef struct
    132 {
    133     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    134     tNFA_SNEP_RESP_CODE resp_code;          /* response code from server       */
    135 } tNFA_SNEP_PUT_RESP;
    136 
    137 /* Data for NFA_SNEP_DISC_EVT */
    138 typedef struct
    139 {
    140     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    141                                             /* client_handle if connection failed */
    142 } tNFA_SNEP_DISC;
    143 
    144 /* Data for NFA_SNEP_ALLOC_BUFF_EVT */
    145 typedef struct
    146 {
    147     tNFA_HANDLE         conn_handle;        /* handle for data link connection                */
    148     tNFA_SNEP_REQ_CODE  req_code;           /* NFA_SNEP_REQ_CODE_GET or NFA_SNEP_REQ_CODE_PUT */
    149     tNFA_SNEP_RESP_CODE resp_code;          /* Response code if cannot allocate buffer        */
    150     UINT32              ndef_length;        /* NDEF message length                            */
    151     UINT8               *p_buff;            /* buffer for NDEF message                        */
    152 } tNFA_SNEP_ALLOC;
    153 
    154 /* Data for NFA_SNEP_FREE_BUFF_EVT */
    155 typedef struct
    156 {
    157     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    158     UINT8               *p_buff;            /* buffer to free                  */
    159 } tNFA_SNEP_FREE;
    160 
    161 /* Data for NFA_SNEP_GET_RESP_CMPL_EVT */
    162 typedef struct
    163 {
    164     tNFA_HANDLE         conn_handle;        /* handle for data link connection */
    165     UINT8               *p_buff;            /* buffer for NDEF message         */
    166 } tNFA_SNEP_GET_RESP_CMPL;
    167 
    168 /* Union of all SNEP callback structures */
    169 typedef union
    170 {
    171     tNFA_SNEP_REG           reg;            /* NFA_SNEP_REG_EVT             */
    172     tNFA_SNEP_ACTIVATED     activated;      /* NFA_SNEP_ACTIVATED_EVT       */
    173     tNFA_SNEP_DEACTIVATED   deactivated;    /* NFA_SNEP_DEACTIVATED_EVT     */
    174     tNFA_SNEP_CONNECT       connect;        /* NFA_SNEP_CONNECTED_EVT       */
    175     tNFA_SNEP_GET_REQ       get_req;        /* NFA_SNEP_GET_REQ_EVT         */
    176     tNFA_SNEP_PUT_REQ       put_req;        /* NFA_SNEP_PUT_REQ_EVT         */
    177     tNFA_SNEP_GET_RESP      get_resp;       /* NFA_SNEP_GET_RESP_EVT        */
    178     tNFA_SNEP_PUT_RESP      put_resp;       /* NFA_SNEP_PUT_RESP_EVT        */
    179     tNFA_SNEP_DISC          disc;           /* NFA_SNEP_DISC_EVT            */
    180     tNFA_SNEP_ALLOC         alloc;          /* NFA_SNEP_ALLOC_BUFF_EVT      */
    181     tNFA_SNEP_FREE          free;           /* NFA_SNEP_FREE_BUFF_EVT       */
    182     tNFA_SNEP_GET_RESP_CMPL get_resp_cmpl;  /* NFA_SNEP_GET_RESP_CMPL_EVT   */
    183 } tNFA_SNEP_EVT_DATA;
    184 
    185 /* NFA SNEP callback */
    186 typedef void (tNFA_SNEP_CBACK) (tNFA_SNEP_EVT event, tNFA_SNEP_EVT_DATA *p_data);
    187 
    188 /*****************************************************************************
    189 **  External Function Declarations
    190 *****************************************************************************/
    191 #ifdef __cplusplus
    192 extern "C"
    193 {
    194 #endif
    195 
    196 /*******************************************************************************
    197 **
    198 ** Function         NFA_SnepStartDefaultServer
    199 **
    200 ** Description      This function is called to listen to SAP, 0x04 as SNEP default
    201 **                  server ("urn:nfc:sn:snep") on LLCP.
    202 **
    203 **                  NFA_SNEP_DEFAULT_SERVER_STARTED_EVT without data will be returned.
    204 **
    205 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    206 **                  should happen before calling this function
    207 **
    208 ** Returns          NFA_STATUS_OK if successfully initiated
    209 **                  NFA_STATUS_FAILED otherwise
    210 **
    211 *******************************************************************************/
    212 NFC_API extern tNFA_STATUS NFA_SnepStartDefaultServer (tNFA_SNEP_CBACK *p_cback);
    213 
    214 /*******************************************************************************
    215 **
    216 ** Function         NFA_SnepStopDefaultServer
    217 **
    218 ** Description      This function is called to stop SNEP default server on LLCP.
    219 **
    220 **                  NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT without data will be returned.
    221 **
    222 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    223 **                  should happen before calling this function
    224 **
    225 ** Returns          NFA_STATUS_OK if successfully initiated
    226 **                  NFA_STATUS_FAILED otherwise
    227 **
    228 *******************************************************************************/
    229 NFC_API extern tNFA_STATUS NFA_SnepStopDefaultServer (tNFA_SNEP_CBACK *p_cback);
    230 
    231 /*******************************************************************************
    232 **
    233 ** Function         NFA_SnepRegisterServer
    234 **
    235 ** Description      This function is called to listen to a SAP as SNEP server.
    236 **
    237 **                  If server_sap is set to NFA_SNEP_ANY_SAP, then NFA will allocate
    238 **                  a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
    239 **
    240 **                  NFC Forum default SNEP server ("urn:nfc:sn:snep") may be launched
    241 **                  by NFA_SnepStartDefaultServer ().
    242 **
    243 **                  NFA_SNEP_REG_EVT will be returned with status, handle and service name.
    244 **
    245 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    246 **                  should happen before calling this function
    247 **
    248 ** Returns          NFA_STATUS_OK if successfully initiated
    249 **                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
    250 **                  NFA_STATUS_FAILED otherwise
    251 **
    252 *******************************************************************************/
    253 NFC_API extern tNFA_STATUS NFA_SnepRegisterServer (UINT8           server_sap,
    254                                                    char            *p_service_name,
    255                                                    tNFA_SNEP_CBACK *p_cback);
    256 
    257 /*******************************************************************************
    258 **
    259 ** Function         NFA_SnepRegisterClient
    260 **
    261 ** Description      This function is called to register SNEP client.
    262 **                  NFA_SNEP_REG_EVT will be returned with status, handle
    263 **                  and zero-length service name.
    264 **
    265 ** Returns          NFA_STATUS_OK if successfully initiated
    266 **                  NFA_STATUS_INVALID_PARAM if p_cback is NULL
    267 **                  NFA_STATUS_FAILED otherwise
    268 **
    269 *******************************************************************************/
    270 NFC_API extern tNFA_STATUS NFA_SnepRegisterClient (tNFA_SNEP_CBACK *p_cback);
    271 
    272 /*******************************************************************************
    273 **
    274 ** Function         NFA_SnepDeregister
    275 **
    276 ** Description      This function is called to stop listening as SNEP server
    277 **                  or SNEP client. Application shall use reg_handle returned in
    278 **                  NFA_SNEP_REG_EVT.
    279 **
    280 ** Note:            If this function is called to de-register a SNEP server and RF
    281 **                  discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    282 **                  should happen before calling this function
    283 **
    284 ** Returns          NFA_STATUS_OK if successfully initiated
    285 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    286 **                  NFA_STATUS_FAILED otherwise
    287 **
    288 *******************************************************************************/
    289 NFC_API extern tNFA_STATUS NFA_SnepDeregister (tNFA_HANDLE reg_handle);
    290 
    291 /*******************************************************************************
    292 **
    293 ** Function         NFA_SnepConnect
    294 **
    295 ** Description      This function is called by client to create data link connection
    296 **                  to SNEP server on peer device.
    297 **
    298 **                  Client handle and service name of server to connect shall be provided.
    299 **                  A conn_handle will be returned in NFA_SNEP_CONNECTED_EVT, if
    300 **                  successfully connected. Otherwise NFA_SNEP_DISC_EVT will be returned.
    301 **
    302 ** Returns          NFA_STATUS_OK if successfully initiated
    303 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    304 **                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
    305 **                  NFA_STATUS_FAILED otherwise
    306 **
    307 *******************************************************************************/
    308 NFC_API extern tNFA_STATUS NFA_SnepConnect (tNFA_HANDLE     client_handle,
    309                                             char            *p_service_name);
    310 
    311 /*******************************************************************************
    312 **
    313 ** Function         NFA_SnepGet
    314 **
    315 ** Description      This function is called by client to send GET request.
    316 **
    317 **                  Application shall allocate a buffer and put NDEF message with
    318 **                  desired record type to get from server. NDEF message from server
    319 **                  will be returned in the same buffer with NFA_SNEP_GET_RESP_EVT.
    320 **                  The size of buffer will be used as "Acceptable Length".
    321 **
    322 **                  NFA_SNEP_GET_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
    323 **                  through registered p_cback. Application may free the buffer
    324 **                  after receiving these events.
    325 **
    326 **
    327 ** Returns          NFA_STATUS_OK if successfully initiated
    328 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    329 **                  NFA_STATUS_FAILED otherwise
    330 **
    331 *******************************************************************************/
    332 NFC_API extern tNFA_STATUS NFA_SnepGet (tNFA_HANDLE     conn_handle,
    333                                         UINT32          buff_length,
    334                                         UINT32          ndef_length,
    335                                         UINT8           *p_ndef_buff);
    336 
    337 /*******************************************************************************
    338 **
    339 ** Function         NFA_SnepPut
    340 **
    341 ** Description      This function is called by client to send PUT request.
    342 **
    343 **                  Application shall allocate a buffer and put desired NDEF message
    344 **                  to send to server.
    345 **
    346 **                  NFA_SNEP_PUT_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
    347 **                  through p_cback. Application may free the buffer after receiving
    348 **                  these events.
    349 **
    350 ** Returns          NFA_STATUS_OK if successfully initiated
    351 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    352 **                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
    353 **                  NFA_STATUS_FAILED otherwise
    354 **
    355 *******************************************************************************/
    356 NFC_API extern tNFA_STATUS NFA_SnepPut (tNFA_HANDLE     conn_handle,
    357                                         UINT32          ndef_length,
    358                                         UINT8           *p_ndef_buff);
    359 
    360 /*******************************************************************************
    361 **
    362 ** Function         NFA_SnepGetResponse
    363 **
    364 ** Description      This function is called by server to send response of GET request.
    365 **
    366 **                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
    367 **                  it shall allocate a buffer for incoming NDEF message and
    368 **                  pass the pointer within callback context. This buffer will be
    369 **                  returned with NFA_SNEP_GET_REQ_EVT after receiving complete
    370 **                  NDEF message. If buffer is not allocated, NFA_SNEP_RESP_CODE_NOT_FOUND
    371 **                  (Note:There is no proper response code for this case)
    372 **                  or NFA_SNEP_RESP_CODE_REJECT will be sent to client.
    373 **
    374 **                  Server application shall provide conn_handle which is received in
    375 **                  NFA_SNEP_GET_REQ_EVT.
    376 **
    377 **                  Server application shall allocate a buffer and put NDEF message if
    378 **                  response code is NFA_SNEP_RESP_CODE_SUCCESS. Otherwise, ndef_length
    379 **                  shall be set to zero.
    380 **
    381 **                  NFA_SNEP_GET_RESP_CMPL_EVT or NFA_SNEP_DISC_EVT will be returned
    382 **                  through registered callback function. Application may free
    383 **                  the buffer after receiving these events.
    384 **
    385 ** Returns          NFA_STATUS_OK if successfully initiated
    386 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    387 **                  NFA_STATUS_FAILED otherwise
    388 **
    389 *******************************************************************************/
    390 NFC_API extern tNFA_STATUS NFA_SnepGetResponse (tNFA_HANDLE         conn_handle,
    391                                                 tNFA_SNEP_RESP_CODE resp_code,
    392                                                 UINT32              ndef_length,
    393                                                 UINT8               *p_ndef_buff);
    394 
    395 /*******************************************************************************
    396 **
    397 ** Function         NFA_SnepPutResponse
    398 **
    399 ** Description      This function is called by server to send response of PUT request.
    400 **
    401 **                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
    402 **                  it shall allocate a buffer for incoming NDEF message and
    403 **                  pass the pointer within callback context. This buffer will be
    404 **                  returned with NFA_SNEP_PUT_REQ_EVT after receiving complete
    405 **                  NDEF message.  If buffer is not allocated, NFA_SNEP_RESP_CODE_REJECT
    406 **                  will be sent to client or NFA will discard request and send
    407 **                  NFA_SNEP_RESP_CODE_SUCCESS (Note:There is no proper response code for
    408 **                  this case).
    409 **
    410 **                  Server application shall provide conn_handle which is received in
    411 **                  NFA_SNEP_PUT_REQ_EVT.
    412 **
    413 **                  NFA_SNEP_DISC_EVT will be returned through registered callback
    414 **                  function when client disconnects data link connection.
    415 **
    416 ** Returns          NFA_STATUS_OK if successfully initiated
    417 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    418 **                  NFA_STATUS_FAILED otherwise
    419 **
    420 *******************************************************************************/
    421 NFC_API extern tNFA_STATUS NFA_SnepPutResponse (tNFA_HANDLE         conn_handle,
    422                                                 tNFA_SNEP_RESP_CODE resp_code);
    423 
    424 /*******************************************************************************
    425 **
    426 ** Function         NFA_SnepDisconnect
    427 **
    428 ** Description      This function is called to disconnect data link connection.
    429 **                  discard any pending data if flush is set to TRUE
    430 **
    431 **                  Client application shall provide conn_handle in NFA_SNEP_GET_RESP_EVT
    432 **                  or NFA_SNEP_PUT_RESP_EVT.
    433 **
    434 **                  Server application shall provide conn_handle in NFA_SNEP_GET_REQ_EVT
    435 **                  or NFA_SNEP_PUT_REQ_EVT.
    436 **
    437 **                  NFA_SNEP_DISC_EVT will be returned
    438 **
    439 ** Returns          NFA_STATUS_OK if successfully initiated
    440 **                  NFA_STATUS_BAD_HANDLE if handle is not valid
    441 **                  NFA_STATUS_FAILED otherwise
    442 **
    443 *******************************************************************************/
    444 NFC_API extern tNFA_STATUS NFA_SnepDisconnect (tNFA_HANDLE conn_handle,
    445                                                BOOLEAN     flush);
    446 
    447 /*******************************************************************************
    448 **
    449 ** Function         NFA_SnepSetTraceLevel
    450 **
    451 ** Description      This function sets the trace level for SNEP.  If called with
    452 **                  a value of 0xFF, it simply returns the current trace level.
    453 **
    454 ** Returns          The new or current trace level
    455 **
    456 *******************************************************************************/
    457 NFC_API extern UINT8 NFA_SnepSetTraceLevel (UINT8 new_level);
    458 
    459 #ifdef __cplusplus
    460 }
    461 #endif
    462 
    463 #endif /* NFA_P2P_API_H */
    464 
    465