Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2001-2012 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 interface file contains the interface to the Bluetooth Network
     22  *  Encapsilation Protocol (BNEP).
     23  *
     24  ******************************************************************************/
     25 #ifndef BNEP_API_H
     26 #define BNEP_API_H
     27 
     28 #include "l2c_api.h"
     29 
     30 /*****************************************************************************
     31 **  Constants
     32 *****************************************************************************/
     33 
     34 /* Define the minimum offset needed in a GKI buffer for
     35 ** sending BNEP packets. Note, we are currently not sending
     36 ** extension headers, but may in the future, so allow
     37 ** space for them
     38 */
     39 #define BNEP_MINIMUM_OFFSET        (15 + L2CAP_MIN_OFFSET)
     40 #define BNEP_INVALID_HANDLE         0xFFFF
     41 
     42 /*****************************************************************************
     43 **  Type Definitions
     44 *****************************************************************************/
     45 
     46 /* Define the result codes from BNEP
     47 */
     48 enum
     49 {
     50     BNEP_SUCCESS,                       /* Success                           */
     51     BNEP_CONN_DISCONNECTED,             /* Connection terminated   */
     52     BNEP_NO_RESOURCES,                  /* No resources                      */
     53     BNEP_MTU_EXCEDED,                   /* Attempt to write long data        */
     54     BNEP_INVALID_OFFSET,                /* Insufficient offset in GKI buffer */
     55     BNEP_CONN_FAILED,                   /* Connection failed                 */
     56     BNEP_CONN_FAILED_CFG,               /* Connection failed cos of config   */
     57     BNEP_CONN_FAILED_SRC_UUID,          /* Connection failed wrong source UUID   */
     58     BNEP_CONN_FAILED_DST_UUID,          /* Connection failed wrong destination UUID   */
     59     BNEP_CONN_FAILED_UUID_SIZE,         /* Connection failed wrong size UUID   */
     60     BNEP_Q_SIZE_EXCEEDED,               /* Too many buffers to dest          */
     61     BNEP_TOO_MANY_FILTERS,              /* Too many local filters specified  */
     62     BNEP_SET_FILTER_FAIL,               /* Set Filter failed  */
     63     BNEP_WRONG_HANDLE,                  /* Wrong handle for the connection  */
     64     BNEP_WRONG_STATE,                   /* Connection is in wrong state */
     65     BNEP_SECURITY_FAIL,                 /* Failed because of security */
     66     BNEP_IGNORE_CMD,                    /* To ignore the rcvd command */
     67     BNEP_TX_FLOW_ON,                    /* tx data flow enabled */
     68     BNEP_TX_FLOW_OFF                    /* tx data flow disabled */
     69 
     70 }; typedef UINT8 tBNEP_RESULT;
     71 
     72 
     73 /***************************
     74 **  Callback Functions
     75 ****************************/
     76 
     77 /* Connection state change callback prototype. Parameters are
     78 **              Connection handle
     79 **              BD Address of remote
     80 **              Connection state change result
     81 **                  BNEP_SUCCESS indicates connection is success
     82 **                  All values are used to indicate the reason for failure
     83 **              Flag to indicate if it is just a role change
     84 */
     85 typedef void (tBNEP_CONN_STATE_CB) (UINT16 handle,
     86                                     BD_ADDR rem_bda,
     87                                     tBNEP_RESULT result,
     88                                     BOOLEAN is_role_change);
     89 
     90 
     91 
     92 
     93 /* Connection indication callback prototype. Parameters are
     94 **              BD Address of remote, remote UUID and local UUID
     95 **              and flag to indicate role change and handle to the connection
     96 **              When BNEP calls this function profile should
     97 **              use BNEP_ConnectResp call to accept or reject the request
     98 */
     99 typedef void (tBNEP_CONNECT_IND_CB) (UINT16 handle,
    100                                      BD_ADDR bd_addr,
    101                                      tBT_UUID *remote_uuid,
    102                                      tBT_UUID *local_uuid,
    103                                      BOOLEAN is_role_change);
    104 
    105 
    106 
    107 /* Data buffer received indication callback prototype. Parameters are
    108 **              Handle to the connection
    109 **              Source BD/Ethernet Address
    110 **              Dest BD/Ethernet address
    111 **              Protocol
    112 **              Pointer to the buffer
    113 **              Flag to indicate whether extension headers to be forwarded are present
    114 */
    115 typedef void (tBNEP_DATA_BUF_CB) (UINT16 handle,
    116                                   UINT8 *src,
    117                                   UINT8 *dst,
    118                                   UINT16 protocol,
    119                                   BT_HDR *p_buf,
    120                                   BOOLEAN fw_ext_present);
    121 
    122 
    123 /* Data received indication callback prototype. Parameters are
    124 **              Handle to the connection
    125 **              Source BD/Ethernet Address
    126 **              Dest BD/Ethernet address
    127 **              Protocol
    128 **              Pointer to the beginning of the data
    129 **              Length of data
    130 **              Flag to indicate whether extension headers to be forwarded are present
    131 */
    132 typedef void (tBNEP_DATA_IND_CB) (UINT16 handle,
    133                                   UINT8 *src,
    134                                   UINT8 *dst,
    135                                   UINT16 protocol,
    136                                   UINT8 *p_data,
    137                                   UINT16 len,
    138                                   BOOLEAN fw_ext_present);
    139 
    140 /* Flow control callback for TX data. Parameters are
    141 **              Handle to the connection
    142 **              Event  flow status
    143 */
    144 typedef void (tBNEP_TX_DATA_FLOW_CB) (UINT16 handle,
    145                                       tBNEP_RESULT  event);
    146 
    147 /* Filters received indication callback prototype. Parameters are
    148 **              Handle to the connection
    149 **              TRUE if the cb is called for indication
    150 **              Ignore this if it is indication, otherwise it is the result
    151 **                      for the filter set operation performed by the local
    152 **                      device
    153 **              Number of protocol filters present
    154 **              Pointer to the filters start. Filters are present in pairs
    155 **                      of start of the range and end of the range.
    156 **                      They will be present in big endian order. First
    157 **                      two bytes will be starting of the first range and
    158 **                      next two bytes will be ending of the range.
    159 */
    160 typedef void (tBNEP_FILTER_IND_CB) (UINT16 handle,
    161                                     BOOLEAN indication,
    162                                     tBNEP_RESULT result,
    163                                     UINT16 num_filters,
    164                                     UINT8 *p_filters);
    165 
    166 
    167 
    168 /* Multicast Filters received indication callback prototype. Parameters are
    169 **              Handle to the connection
    170 **              TRUE if the cb is called for indication
    171 **              Ignore this if it is indication, otherwise it is the result
    172 **                      for the filter set operation performed by the local
    173 **                      device
    174 **              Number of multicast filters present
    175 **              Pointer to the filters start. Filters are present in pairs
    176 **                      of start of the range and end of the range.
    177 **                      First six bytes will be starting of the first range and
    178 **                      next six bytes will be ending of the range.
    179 */
    180 typedef void (tBNEP_MFILTER_IND_CB) (UINT16 handle,
    181                                      BOOLEAN indication,
    182                                      tBNEP_RESULT result,
    183                                      UINT16 num_mfilters,
    184                                      UINT8 *p_mfilters);
    185 
    186 /* This is the structure used by profile to register with BNEP */
    187 typedef struct
    188 {
    189     tBNEP_CONNECT_IND_CB    *p_conn_ind_cb;     /* To indicate the conn request */
    190     tBNEP_CONN_STATE_CB     *p_conn_state_cb;   /* To indicate conn state change */
    191     tBNEP_DATA_IND_CB       *p_data_ind_cb;     /* To pass the data received */
    192     tBNEP_DATA_BUF_CB       *p_data_buf_cb;     /* To pass the data buffer received */
    193     tBNEP_TX_DATA_FLOW_CB   *p_tx_data_flow_cb; /* data flow callback */
    194     tBNEP_FILTER_IND_CB     *p_filter_ind_cb;   /* To indicate that peer set protocol filters */
    195     tBNEP_MFILTER_IND_CB    *p_mfilter_ind_cb;  /* To indicate that peer set mcast filters */
    196 
    197 } tBNEP_REGISTER;
    198 
    199 
    200 
    201 /* This is the structure used by profile to get the status of BNEP */
    202 typedef struct
    203 {
    204 #define BNEP_STATUS_FAILE            0
    205 #define BNEP_STATUS_CONNECTED        1
    206     UINT8             con_status;
    207 
    208     UINT16            l2cap_cid;
    209     BD_ADDR           rem_bda;
    210     UINT16            rem_mtu_size;
    211     UINT16            xmit_q_depth;
    212 
    213     UINT16            sent_num_filters;
    214     UINT16            sent_mcast_filters;
    215     UINT16            rcvd_num_filters;
    216     UINT16            rcvd_mcast_filters;
    217     tBT_UUID          src_uuid;
    218     tBT_UUID          dst_uuid;
    219 
    220 } tBNEP_STATUS;
    221 
    222 
    223 
    224 /*****************************************************************************
    225 **  External Function Declarations
    226 *****************************************************************************/
    227 #ifdef __cplusplus
    228 extern "C" {
    229 #endif
    230 
    231 /*******************************************************************************
    232 **
    233 ** Function         BNEP_Register
    234 **
    235 ** Description      This function is called by the upper layer to register
    236 **                  its callbacks with BNEP
    237 **
    238 ** Parameters:      p_reg_info - contains all callback function pointers
    239 **
    240 **
    241 ** Returns          BNEP_SUCCESS        if registered successfully
    242 **                  BNEP_FAILURE        if connection state callback is missing
    243 **
    244 *******************************************************************************/
    245 BNEP_API extern tBNEP_RESULT BNEP_Register (tBNEP_REGISTER *p_reg_info);
    246 
    247 /*******************************************************************************
    248 **
    249 ** Function         BNEP_Deregister
    250 **
    251 ** Description      This function is called by the upper layer to de-register
    252 **                  its callbacks.
    253 **
    254 ** Parameters:      void
    255 **
    256 **
    257 ** Returns          void
    258 **
    259 *******************************************************************************/
    260 BNEP_API extern void BNEP_Deregister (void);
    261 
    262 
    263 /*******************************************************************************
    264 **
    265 ** Function         BNEP_Connect
    266 **
    267 ** Description      This function creates a BNEP connection to a remote
    268 **                  device.
    269 **
    270 ** Parameters:      p_rem_addr  - BD_ADDR of the peer
    271 **                  src_uuid    - source uuid for the connection
    272 **                  dst_uuid    - destination uuid for the connection
    273 **                  p_handle    - pointer to return the handle for the connection
    274 **
    275 ** Returns          BNEP_SUCCESS                if connection started
    276 **                  BNEP_NO_RESOURCES           if no resources
    277 **
    278 *******************************************************************************/
    279 BNEP_API extern tBNEP_RESULT BNEP_Connect (BD_ADDR p_rem_bda,
    280                                          tBT_UUID *src_uuid,
    281                                          tBT_UUID *dst_uuid,
    282                                          UINT16 *p_handle);
    283 
    284 /*******************************************************************************
    285 **
    286 ** Function         BNEP_ConnectResp
    287 **
    288 ** Description      This function is called in responce to connection indication
    289 **
    290 **
    291 ** Parameters:      handle  - handle given in the connection indication
    292 **                  resp    - responce for the connection indication
    293 **
    294 ** Returns          BNEP_SUCCESS                if connection started
    295 **                  BNEP_WRONG_HANDLE           if the connection is not found
    296 **                  BNEP_WRONG_STATE            if the responce is not expected
    297 **
    298 *******************************************************************************/
    299 BNEP_API extern tBNEP_RESULT BNEP_ConnectResp (UINT16 handle, tBNEP_RESULT resp);
    300 
    301 /*******************************************************************************
    302 **
    303 ** Function         BNEP_Disconnect
    304 **
    305 ** Description      This function is called to close the specified connection.
    306 **
    307 ** Parameters:      handle   - handle of the connection
    308 **
    309 ** Returns          BNEP_SUCCESS                if connection is disconnected
    310 **                  BNEP_WRONG_HANDLE           if no connection is not found
    311 **
    312 *******************************************************************************/
    313 BNEP_API extern tBNEP_RESULT BNEP_Disconnect (UINT16 handle);
    314 
    315 /*******************************************************************************
    316 **
    317 ** Function         BNEP_WriteBuf
    318 **
    319 ** Description      This function sends data in a GKI buffer on BNEP connection
    320 **
    321 ** Parameters:      handle       - handle of the connection to write
    322 **                  p_dest_addr  - BD_ADDR/Ethernet addr of the destination
    323 **                  p_buf        - pointer to address of buffer with data
    324 **                  protocol     - protocol type of the packet
    325 **                  p_src_addr   - (optional) BD_ADDR/ethernet address of the source
    326 **                                 (should be NULL if it is local BD Addr)
    327 **                  fw_ext_present - forwarded extensions present
    328 **
    329 ** Returns:         BNEP_WRONG_HANDLE       - if passed handle is not valid
    330 **                  BNEP_MTU_EXCEDED        - If the data length is greater than MTU
    331 **                  BNEP_IGNORE_CMD         - If the packet is filtered out
    332 **                  BNEP_Q_SIZE_EXCEEDED    - If the Tx Q is full
    333 **                  BNEP_SUCCESS            - If written successfully
    334 **
    335 *******************************************************************************/
    336 BNEP_API extern tBNEP_RESULT BNEP_WriteBuf (UINT16 handle,
    337                                           UINT8 *p_dest_addr,
    338                                           BT_HDR *p_buf,
    339                                           UINT16 protocol,
    340                                           UINT8 *p_src_addr,
    341                                           BOOLEAN fw_ext_present);
    342 
    343 /*******************************************************************************
    344 **
    345 ** Function         BNEP_Write
    346 **
    347 ** Description      This function sends data over a BNEP connection
    348 **
    349 ** Parameters:      handle       - handle of the connection to write
    350 **                  p_dest_addr  - BD_ADDR/Ethernet addr of the destination
    351 **                  p_data       - pointer to data start
    352 **                  protocol     - protocol type of the packet
    353 **                  p_src_addr   - (optional) BD_ADDR/ethernet address of the source
    354 **                                 (should be NULL if it is local BD Addr)
    355 **                  fw_ext_present - forwarded extensions present
    356 **
    357 ** Returns:         BNEP_WRONG_HANDLE       - if passed handle is not valid
    358 **                  BNEP_MTU_EXCEDED        - If the data length is greater than MTU
    359 **                  BNEP_IGNORE_CMD         - If the packet is filtered out
    360 **                  BNEP_Q_SIZE_EXCEEDED    - If the Tx Q is full
    361 **                  BNEP_NO_RESOURCES       - If not able to allocate a buffer
    362 **                  BNEP_SUCCESS            - If written successfully
    363 **
    364 *******************************************************************************/
    365 BNEP_API extern tBNEP_RESULT  BNEP_Write (UINT16 handle,
    366                                         UINT8 *p_dest_addr,
    367                                         UINT8 *p_data,
    368                                         UINT16 len,
    369                                         UINT16 protocol,
    370                                         UINT8 *p_src_addr,
    371                                         BOOLEAN fw_ext_present);
    372 
    373 /*******************************************************************************
    374 **
    375 ** Function         BNEP_SetProtocolFilters
    376 **
    377 ** Description      This function sets the protocol filters on peer device
    378 **
    379 ** Parameters:      handle        - Handle for the connection
    380 **                  num_filters   - total number of filter ranges
    381 **                  p_start_array - Array of beginings of all protocol ranges
    382 **                  p_end_array   - Array of ends of all protocol ranges
    383 **
    384 ** Returns          BNEP_WRONG_HANDLE           - if the connection handle is not valid
    385 **                  BNEP_SET_FILTER_FAIL        - if the connection is in wrong state
    386 **                  BNEP_TOO_MANY_FILTERS       - if too many filters
    387 **                  BNEP_SUCCESS                - if request sent successfully
    388 **
    389 *******************************************************************************/
    390 BNEP_API extern tBNEP_RESULT BNEP_SetProtocolFilters (UINT16 handle,
    391                                                     UINT16 num_filters,
    392                                                     UINT16 *p_start_array,
    393                                                     UINT16 *p_end_array);
    394 
    395 /*******************************************************************************
    396 **
    397 ** Function         BNEP_SetMulticastFilters
    398 **
    399 ** Description      This function sets the filters for multicast addresses for BNEP.
    400 **
    401 ** Parameters:      handle        - Handle for the connection
    402 **                  num_filters   - total number of filter ranges
    403 **                  p_start_array - Pointer to sequence of beginings of all
    404 **                                         multicast address ranges
    405 **                  p_end_array   - Pointer to sequence of ends of all
    406 **                                         multicast address ranges
    407 **
    408 ** Returns          BNEP_WRONG_HANDLE           - if the connection handle is not valid
    409 **                  BNEP_SET_FILTER_FAIL        - if the connection is in wrong state
    410 **                  BNEP_TOO_MANY_FILTERS       - if too many filters
    411 **                  BNEP_SUCCESS                - if request sent successfully
    412 **
    413 *******************************************************************************/
    414 BNEP_API extern tBNEP_RESULT BNEP_SetMulticastFilters (UINT16 handle,
    415                                                      UINT16 num_filters,
    416                                                      UINT8 *p_start_array,
    417                                                      UINT8 *p_end_array);
    418 
    419 /*******************************************************************************
    420 **
    421 ** Function         BNEP_GetMyBdAddr
    422 **
    423 ** Description      This function returns a pointer to the local device BD address.
    424 **                  If the BD address has not been read yet, it returns NULL.
    425 **
    426 ** Returns          the BD address
    427 **
    428 *******************************************************************************/
    429 BNEP_API extern UINT8 *BNEP_GetMyBdAddr (void);
    430 
    431 /*******************************************************************************
    432 **
    433 ** Function         BNEP_SetTraceLevel
    434 **
    435 ** Description      This function sets the trace level for BNEP. If called with
    436 **                  a value of 0xFF, it simply reads the current trace level.
    437 **
    438 ** Returns          the new (current) trace level
    439 **
    440 *******************************************************************************/
    441 BNEP_API extern UINT8 BNEP_SetTraceLevel (UINT8 new_level);
    442 
    443 /*******************************************************************************
    444 **
    445 ** Function         BNEP_Init
    446 **
    447 ** Description      This function initializes the BNEP unit. It should be called
    448 **                  before accessing any other APIs to initialize the control block
    449 **
    450 ** Returns          void
    451 **
    452 *******************************************************************************/
    453 BNEP_API extern void BNEP_Init (void);
    454 
    455 /*******************************************************************************
    456 **
    457 ** Function         BNEP_GetStatus
    458 **
    459 ** Description      This function gets the status information for BNEP connection
    460 **
    461 ** Returns          BNEP_SUCCESS            - if the status is available
    462 **                  BNEP_NO_RESOURCES       - if no structure is passed for output
    463 **                  BNEP_WRONG_HANDLE       - if the handle is invalid
    464 **                  BNEP_WRONG_STATE        - if not in connected state
    465 **
    466 *******************************************************************************/
    467 BNEP_API extern tBNEP_RESULT BNEP_GetStatus (UINT16 handle, tBNEP_STATUS *p_status);
    468 
    469 
    470 
    471 #ifdef __cplusplus
    472 }
    473 #endif
    474 
    475 
    476 #endif
    477