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 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 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 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 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 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 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 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 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 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_SetTraceLevel 422 ** 423 ** Description This function sets the trace level for BNEP. If called with 424 ** a value of 0xFF, it simply reads the current trace level. 425 ** 426 ** Returns the new (current) trace level 427 ** 428 *******************************************************************************/ 429 extern UINT8 BNEP_SetTraceLevel (UINT8 new_level); 430 431 /******************************************************************************* 432 ** 433 ** Function BNEP_Init 434 ** 435 ** Description This function initializes the BNEP unit. It should be called 436 ** before accessing any other APIs to initialize the control block 437 ** 438 ** Returns void 439 ** 440 *******************************************************************************/ 441 extern void BNEP_Init (void); 442 443 /******************************************************************************* 444 ** 445 ** Function BNEP_GetStatus 446 ** 447 ** Description This function gets the status information for BNEP connection 448 ** 449 ** Returns BNEP_SUCCESS - if the status is available 450 ** BNEP_NO_RESOURCES - if no structure is passed for output 451 ** BNEP_WRONG_HANDLE - if the handle is invalid 452 ** BNEP_WRONG_STATE - if not in connected state 453 ** 454 *******************************************************************************/ 455 extern tBNEP_RESULT BNEP_GetStatus (UINT16 handle, tBNEP_STATUS *p_status); 456 457 458 459 #ifdef __cplusplus 460 } 461 #endif 462 463 464 #endif 465