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*/
48enum
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*/
85typedef 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*/
99typedef 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*/
115typedef 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*/
132typedef 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*/
144typedef 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*/
160typedef 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*/
180typedef 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 */
187typedef 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 */
202typedef 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
228extern "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*******************************************************************************/
245BNEP_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*******************************************************************************/
260BNEP_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*******************************************************************************/
279BNEP_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*******************************************************************************/
299BNEP_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*******************************************************************************/
313BNEP_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*******************************************************************************/
336BNEP_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*******************************************************************************/
365BNEP_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*******************************************************************************/
390BNEP_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*******************************************************************************/
414BNEP_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*******************************************************************************/
429BNEP_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*******************************************************************************/
441BNEP_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*******************************************************************************/
453BNEP_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*******************************************************************************/
467BNEP_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