123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- /******************************************************************************
- *
- * Copyright 2001-2012 Broadcom Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- /******************************************************************************
- *
- * This interface file contains the interface to the Bluetooth Network
- * Encapsilation Protocol (BNEP).
- *
- ******************************************************************************/
- #ifndef BNEP_API_H
- #define BNEP_API_H
- #include "l2c_api.h"
- /*****************************************************************************
- * Constants
- ****************************************************************************/
- /* Define the minimum offset needed in a GKI buffer for
- * sending BNEP packets. Note, we are currently not sending
- * extension headers, but may in the future, so allow
- * space for them
- */
- #define BNEP_MINIMUM_OFFSET (15 + L2CAP_MIN_OFFSET)
- #define BNEP_INVALID_HANDLE 0xFFFF
- /*****************************************************************************
- * Type Definitions
- ****************************************************************************/
- /* Define the result codes from BNEP
- */
- enum {
- BNEP_SUCCESS, /* Success */
- BNEP_CONN_DISCONNECTED, /* Connection terminated */
- BNEP_NO_RESOURCES, /* No resources */
- BNEP_MTU_EXCEDED, /* Attempt to write long data */
- BNEP_INVALID_OFFSET, /* Insufficient offset in GKI buffer */
- BNEP_CONN_FAILED, /* Connection failed */
- BNEP_CONN_FAILED_CFG, /* Connection failed cos of config */
- BNEP_CONN_FAILED_SRC_UUID, /* Connection failed wrong source UUID */
- BNEP_CONN_FAILED_DST_UUID, /* Connection failed wrong destination UUID */
- BNEP_CONN_FAILED_UUID_SIZE, /* Connection failed wrong size UUID */
- BNEP_Q_SIZE_EXCEEDED, /* Too many buffers to dest */
- BNEP_TOO_MANY_FILTERS, /* Too many local filters specified */
- BNEP_SET_FILTER_FAIL, /* Set Filter failed */
- BNEP_WRONG_HANDLE, /* Wrong handle for the connection */
- BNEP_WRONG_STATE, /* Connection is in wrong state */
- BNEP_SECURITY_FAIL, /* Failed because of security */
- BNEP_IGNORE_CMD, /* To ignore the rcvd command */
- BNEP_TX_FLOW_ON, /* tx data flow enabled */
- BNEP_TX_FLOW_OFF /* tx data flow disabled */
- };
- typedef uint8_t tBNEP_RESULT;
- /***************************
- * Callback Functions
- ***************************/
- /* Connection state change callback prototype. Parameters are
- * Connection handle
- * BD Address of remote
- * Connection state change result
- * BNEP_SUCCESS indicates connection is success
- * All values are used to indicate the reason for failure
- * Flag to indicate if it is just a role change
- */
- typedef void(tBNEP_CONN_STATE_CB)(uint16_t handle, const RawAddress& rem_bda,
- tBNEP_RESULT result, bool is_role_change);
- /* Connection indication callback prototype. Parameters are
- * BD Address of remote, remote UUID and local UUID
- * and flag to indicate role change and handle to the connection
- * When BNEP calls this function profile should
- * use BNEP_ConnectResp call to accept or reject the request
- */
- typedef void(tBNEP_CONNECT_IND_CB)(uint16_t handle, const RawAddress& bd_addr,
- const bluetooth::Uuid& remote_uuid,
- const bluetooth::Uuid& local_uuid,
- bool is_role_change);
- /* Data buffer received indication callback prototype. Parameters are
- * Handle to the connection
- * Source BD/Ethernet Address
- * Dest BD/Ethernet address
- * Protocol
- * Pointer to the buffer
- * Flag to indicate whether extension headers to be forwarded are
- * present
- */
- typedef void(tBNEP_DATA_BUF_CB)(uint16_t handle, const RawAddress& src,
- const RawAddress& dst, uint16_t protocol,
- BT_HDR* p_buf, bool fw_ext_present);
- /* Data received indication callback prototype. Parameters are
- * Handle to the connection
- * Source BD/Ethernet Address
- * Dest BD/Ethernet address
- * Protocol
- * Pointer to the beginning of the data
- * Length of data
- * Flag to indicate whether extension headers to be forwarded are
- * present
- */
- typedef void(tBNEP_DATA_IND_CB)(uint16_t handle, const RawAddress& src,
- const RawAddress& dst, uint16_t protocol,
- uint8_t* p_data, uint16_t len,
- bool fw_ext_present);
- /* Flow control callback for TX data. Parameters are
- * Handle to the connection
- * Event flow status
- */
- typedef void(tBNEP_TX_DATA_FLOW_CB)(uint16_t handle, tBNEP_RESULT event);
- /* Filters received indication callback prototype. Parameters are
- * Handle to the connection
- * true if the cb is called for indication
- * Ignore this if it is indication, otherwise it is the result
- * for the filter set operation performed by the local
- * device
- * Number of protocol filters present
- * Pointer to the filters start. Filters are present in pairs
- * of start of the range and end of the range.
- * They will be present in big endian order. First
- * two bytes will be starting of the first range and
- * next two bytes will be ending of the range.
- */
- typedef void(tBNEP_FILTER_IND_CB)(uint16_t handle, bool indication,
- tBNEP_RESULT result, uint16_t num_filters,
- uint8_t* p_filters);
- /* Multicast Filters received indication callback prototype. Parameters are
- * Handle to the connection
- * true if the cb is called for indication
- * Ignore this if it is indication, otherwise it is the result
- * for the filter set operation performed by the local
- * device
- * Number of multicast filters present
- * Pointer to the filters start. Filters are present in pairs
- * of start of the range and end of the range.
- * First six bytes will be starting of the first range and
- * next six bytes will be ending of the range.
- */
- typedef void(tBNEP_MFILTER_IND_CB)(uint16_t handle, bool indication,
- tBNEP_RESULT result, uint16_t num_mfilters,
- uint8_t* p_mfilters);
- /* This is the structure used by profile to register with BNEP */
- typedef struct {
- tBNEP_CONNECT_IND_CB* p_conn_ind_cb; /* To indicate the conn request */
- tBNEP_CONN_STATE_CB* p_conn_state_cb; /* To indicate conn state change */
- tBNEP_DATA_IND_CB* p_data_ind_cb; /* To pass the data received */
- tBNEP_DATA_BUF_CB* p_data_buf_cb; /* To pass the data buffer received */
- tBNEP_TX_DATA_FLOW_CB* p_tx_data_flow_cb; /* data flow callback */
- tBNEP_FILTER_IND_CB*
- p_filter_ind_cb; /* To indicate that peer set protocol filters */
- tBNEP_MFILTER_IND_CB*
- p_mfilter_ind_cb; /* To indicate that peer set mcast filters */
- } tBNEP_REGISTER;
- /* This is the structure used by profile to get the status of BNEP */
- typedef struct {
- #define BNEP_STATUS_FAILE 0
- #define BNEP_STATUS_CONNECTED 1
- uint8_t con_status;
- uint16_t l2cap_cid;
- RawAddress rem_bda;
- uint16_t rem_mtu_size;
- uint16_t xmit_q_depth;
- uint16_t sent_num_filters;
- uint16_t sent_mcast_filters;
- uint16_t rcvd_num_filters;
- uint16_t rcvd_mcast_filters;
- bluetooth::Uuid src_uuid;
- bluetooth::Uuid dst_uuid;
- } tBNEP_STATUS;
- /*****************************************************************************
- * External Function Declarations
- ****************************************************************************/
- /*******************************************************************************
- *
- * Function BNEP_Register
- *
- * Description This function is called by the upper layer to register
- * its callbacks with BNEP
- *
- * Parameters: p_reg_info - contains all callback function pointers
- *
- *
- * Returns BNEP_SUCCESS if registered successfully
- * BNEP_FAILURE if connection state callback is missing
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_Register(tBNEP_REGISTER* p_reg_info);
- /*******************************************************************************
- *
- * Function BNEP_Deregister
- *
- * Description This function is called by the upper layer to de-register
- * its callbacks.
- *
- * Parameters: void
- *
- *
- * Returns void
- *
- ******************************************************************************/
- extern void BNEP_Deregister(void);
- /*******************************************************************************
- *
- * Function BNEP_Connect
- *
- * Description This function creates a BNEP connection to a remote
- * device.
- *
- * Parameters: p_rem_addr - BD_ADDR of the peer
- * src_uuid - source uuid for the connection
- * dst_uuid - destination uuid for the connection
- * p_handle - pointer to return the handle for the connection
- *
- * Returns BNEP_SUCCESS if connection started
- * BNEP_NO_RESOURCES if no resources
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_Connect(const RawAddress& p_rem_bda,
- const bluetooth::Uuid& src_uuid,
- const bluetooth::Uuid& dst_uuid,
- uint16_t* p_handle);
- /*******************************************************************************
- *
- * Function BNEP_ConnectResp
- *
- * Description This function is called in responce to connection indication
- *
- *
- * Parameters: handle - handle given in the connection indication
- * resp - responce for the connection indication
- *
- * Returns BNEP_SUCCESS if connection started
- * BNEP_WRONG_HANDLE if the connection is not found
- * BNEP_WRONG_STATE if the responce is not expected
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_ConnectResp(uint16_t handle, tBNEP_RESULT resp);
- /*******************************************************************************
- *
- * Function BNEP_Disconnect
- *
- * Description This function is called to close the specified connection.
- *
- * Parameters: handle - handle of the connection
- *
- * Returns BNEP_SUCCESS if connection is disconnected
- * BNEP_WRONG_HANDLE if no connection is not found
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_Disconnect(uint16_t handle);
- /*******************************************************************************
- *
- * Function BNEP_WriteBuf
- *
- * Description This function sends data in a GKI buffer on BNEP connection
- *
- * Parameters: handle - handle of the connection to write
- * p_dest_addr - BD_ADDR/Ethernet addr of the destination
- * p_buf - pointer to address of buffer with data
- * protocol - protocol type of the packet
- * p_src_addr - (optional) BD_ADDR/ethernet address of the
- * source (should be NULL if it is the local BD
- * Addr)
- * fw_ext_present - forwarded extensions present
- *
- * Returns: BNEP_WRONG_HANDLE - if passed handle is not valid
- * BNEP_MTU_EXCEDED - If the data length is greater
- * than MTU
- * BNEP_IGNORE_CMD - If the packet is filtered out
- * BNEP_Q_SIZE_EXCEEDED - If the Tx Q is full
- * BNEP_SUCCESS - If written successfully
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_WriteBuf(uint16_t handle,
- const RawAddress& p_dest_addr, BT_HDR* p_buf,
- uint16_t protocol,
- const RawAddress* p_src_addr,
- bool fw_ext_present);
- /*******************************************************************************
- *
- * Function BNEP_Write
- *
- * Description This function sends data over a BNEP connection
- *
- * Parameters: handle - handle of the connection to write
- * p_dest_addr - BD_ADDR/Ethernet addr of the destination
- * p_data - pointer to data start
- * protocol - protocol type of the packet
- * p_src_addr - (optional) BD_ADDR/ethernet address of the
- * source (should be NULL if it is the local BD
- * Addr)
- * fw_ext_present - forwarded extensions present
- *
- * Returns: BNEP_WRONG_HANDLE - if passed handle is not valid
- * BNEP_MTU_EXCEDED - If the data length is greater than
- * the MTU
- * BNEP_IGNORE_CMD - If the packet is filtered out
- * BNEP_Q_SIZE_EXCEEDED - If the Tx Q is full
- * BNEP_NO_RESOURCES - If not able to allocate a buffer
- * BNEP_SUCCESS - If written successfully
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_Write(uint16_t handle, const RawAddress& p_dest_addr,
- uint8_t* p_data, uint16_t len, uint16_t protocol,
- const RawAddress* p_src_addr,
- bool fw_ext_present);
- /*******************************************************************************
- *
- * Function BNEP_SetProtocolFilters
- *
- * Description This function sets the protocol filters on peer device
- *
- * Parameters: handle - Handle for the connection
- * num_filters - total number of filter ranges
- * p_start_array - Array of beginings of all protocol ranges
- * p_end_array - Array of ends of all protocol ranges
- *
- * Returns BNEP_WRONG_HANDLE - if the connection handle is
- * not valid
- * BNEP_SET_FILTER_FAIL - if the connection is in the
- * wrong state
- * BNEP_TOO_MANY_FILTERS - if too many filters
- * BNEP_SUCCESS - if request sent successfully
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_SetProtocolFilters(uint16_t handle,
- uint16_t num_filters,
- uint16_t* p_start_array,
- uint16_t* p_end_array);
- /*******************************************************************************
- *
- * Function BNEP_SetMulticastFilters
- *
- * Description This function sets the filters for multicast addresses for
- * BNEP.
- *
- * Parameters: handle - Handle for the connection
- * num_filters - total number of filter ranges
- * p_start_array - Pointer to sequence of beginings of all
- * multicast address ranges
- * p_end_array - Pointer to sequence of ends of all
- * multicast address ranges
- *
- * Returns BNEP_WRONG_HANDLE - if the connection handle is
- * not valid
- * BNEP_SET_FILTER_FAIL - if the connection is in the
- * wrong state
- * BNEP_TOO_MANY_FILTERS - if too many filters
- * BNEP_SUCCESS - if request sent successfully
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_SetMulticastFilters(uint16_t handle,
- uint16_t num_filters,
- uint8_t* p_start_array,
- uint8_t* p_end_array);
- /*******************************************************************************
- *
- * Function BNEP_SetTraceLevel
- *
- * Description This function sets the trace level for BNEP. If called with
- * a value of 0xFF, it simply reads the current trace level.
- *
- * Returns the new (current) trace level
- *
- ******************************************************************************/
- extern uint8_t BNEP_SetTraceLevel(uint8_t new_level);
- /*******************************************************************************
- *
- * Function BNEP_Init
- *
- * Description This function initializes the BNEP unit. It should be called
- * before accessing any other APIs to initialize the control
- * block
- *
- * Returns void
- *
- ******************************************************************************/
- extern void BNEP_Init(void);
- /*******************************************************************************
- *
- * Function BNEP_GetStatus
- *
- * Description This function gets the status information for BNEP
- * connection
- *
- * Returns BNEP_SUCCESS - if the status is available
- * BNEP_NO_RESOURCES - if no structure is passed for
- * output
- * BNEP_WRONG_HANDLE - if the handle is invalid
- * BNEP_WRONG_STATE - if not in connected state
- *
- ******************************************************************************/
- extern tBNEP_RESULT BNEP_GetStatus(uint16_t handle, tBNEP_STATUS* p_status);
- #endif
|