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