/******************************************************************************
*
* Copyright 2009-2013 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.
*
******************************************************************************/
#ifndef GAP_API_H
#define GAP_API_H
#include "btm_api.h"
#include "l2c_api.h"
#include "profiles_api.h"
/*****************************************************************************
* Constants
****************************************************************************/
/*** GAP Error and Status Codes ***/
/* Unsupported call */
#define GAP_UNSUPPORTED (GAP_ERR_GRP + 0x01)
/* End of inquiry database marker */
#define GAP_EOINQDB (GAP_ERR_GRP + 0x02)
/* The requested function was busy */
#define GAP_ERR_BUSY (GAP_ERR_GRP + 0x03)
/* No control blocks available */
#define GAP_ERR_NO_CTRL_BLK (GAP_ERR_GRP + 0x04)
/* Error occurred while initiating the command */
#define GAP_ERR_STARTING_CMD (GAP_ERR_GRP + 0x05)
/* No Inquiry DB record for BD_ADDR */
#define GAP_NO_BDADDR_REC (GAP_ERR_GRP + 0x06)
/* An illegal mode parameter was detected */
#define GAP_ERR_ILL_MODE (GAP_ERR_GRP + 0x07)
/* An illegal time parameter was detected */
#define GAP_ERR_ILL_INQ_TIME (GAP_ERR_GRP + 0x08)
/* An illegal parameter was detected */
#define GAP_ERR_ILL_PARM (GAP_ERR_GRP + 0x09)
/* Error starting the remote device name request */
#define GAP_ERR_REM_NAME (GAP_ERR_GRP + 0x0a)
/* The GAP command was started (result pending) */
#define GAP_CMD_INITIATED (GAP_ERR_GRP + 0x0b)
/* The device was not up; the request was not executed */
#define GAP_DEVICE_NOT_UP (GAP_ERR_GRP + 0x0c)
/* The bd addr passed in was not found or invalid */
#define GAP_BAD_BD_ADDR (GAP_ERR_GRP + 0x0d)
/* Bad GAP handle */
#define GAP_ERR_BAD_HANDLE (GAP_ERR_GRP + 0x0e)
/* Buffer offset invalid */
#define GAP_ERR_BUF_OFFSET (GAP_ERR_GRP + 0x0f)
/* Connection is in invalid state */
#define GAP_ERR_BAD_STATE (GAP_ERR_GRP + 0x10)
/* No data available */
#define GAP_NO_DATA_AVAIL (GAP_ERR_GRP + 0x11)
/* BT stack is congested */
#define GAP_ERR_CONGESTED (GAP_ERR_GRP + 0x12)
/* Security failed */
#define GAP_ERR_SECURITY (GAP_ERR_GRP + 0x13)
/* General error processing BTM request */
#define GAP_ERR_PROCESSING (GAP_ERR_GRP + 0x14)
/* Timeout occurred while processing cmd */
#define GAP_ERR_TIMEOUT (GAP_ERR_GRP + 0x15)
#define GAP_EVT_CONN_OPENED 0x0100
#define GAP_EVT_CONN_CLOSED 0x0101
#define GAP_EVT_CONN_DATA_AVAIL 0x0102
#define GAP_EVT_CONN_CONGESTED 0x0103
#define GAP_EVT_CONN_UNCONGESTED 0x0104
#define GAP_EVT_TX_EMPTY 0x0105
#define GAP_EVT_LE_COC_CREDITS 0x0106
/* Values for 'chan_mode_mask' field */
/* GAP_ConnOpen() - optional channels to negotiate */
#define GAP_FCR_CHAN_OPT_BASIC L2CAP_FCR_CHAN_OPT_BASIC
#define GAP_FCR_CHAN_OPT_ERTM L2CAP_FCR_CHAN_OPT_ERTM
#define GAP_FCR_CHAN_OPT_STREAM L2CAP_FCR_CHAN_OPT_STREAM
/*** used in connection variables and functions ***/
#define GAP_INVALID_HANDLE 0xFFFF
/* This is used to change the criteria for AMP */
#define GAP_PROTOCOL_ID (UUID_PROTOCOL_UDP)
#ifndef GAP_PREFER_CONN_INT_MAX
#define GAP_PREFER_CONN_INT_MAX BTM_BLE_CONN_INT_MIN
#endif
#ifndef GAP_PREFER_CONN_INT_MIN
#define GAP_PREFER_CONN_INT_MIN BTM_BLE_CONN_INT_MIN
#endif
#ifndef GAP_PREFER_CONN_LATENCY
#define GAP_PREFER_CONN_LATENCY 0
#endif
#ifndef GAP_PREFER_CONN_SP_TOUT
#define GAP_PREFER_CONN_SP_TOUT 2000
#endif
struct tGAP_COC_CREDITS {
uint16_t gap_handle;
uint16_t credits_received;
uint16_t credit_count;
};
union tGAP_CB_DATA {
tGAP_COC_CREDITS coc_credits;
};
/*****************************************************************************
* Type Definitions
****************************************************************************/
/*
* Callback function for connection services
*/
typedef void(tGAP_CONN_CALLBACK)(uint16_t gap_handle, uint16_t event,
tGAP_CB_DATA* data);
/*
* Define the callback function prototypes. Parameters are specific
* to each event and are described below
*/
typedef void(tGAP_CALLBACK)(uint16_t event, void* p_data);
/* Definition of the GAP_FindAddrByName results structure */
typedef struct {
uint16_t status;
RawAddress bd_addr;
tBTM_BD_NAME devname;
} tGAP_FINDADDR_RESULTS;
typedef struct {
uint16_t int_min;
uint16_t int_max;
uint16_t latency;
uint16_t sp_tout;
} tGAP_BLE_PREF_PARAM;
typedef union {
tGAP_BLE_PREF_PARAM conn_param;
RawAddress reconn_bda;
uint16_t icon;
uint8_t* p_dev_name;
uint8_t addr_resolution;
} tGAP_BLE_ATTR_VALUE;
typedef void(tGAP_BLE_CMPL_CBACK)(bool status, const RawAddress& addr,
uint16_t length, char* p_name);
/*****************************************************************************
* External Function Declarations
****************************************************************************/
/*** Functions for L2CAP connection interface ***/
/*******************************************************************************
*
* Function GAP_ConnOpen
*
* Description This function is called to open a generic L2CAP connection.
*
* Returns handle of the connection if successful, else
* GAP_INVALID_HANDLE
*
******************************************************************************/
extern uint16_t GAP_ConnOpen(const char* p_serv_name, uint8_t service_id,
bool is_server, const RawAddress* p_rem_bda,
uint16_t psm, uint16_t le_mps,
tL2CAP_CFG_INFO* p_cfg,
tL2CAP_ERTM_INFO* ertm_info, uint16_t security,
uint8_t chan_mode_mask, tGAP_CONN_CALLBACK* p_cb,
tBT_TRANSPORT transport);
/*******************************************************************************
*
* Function GAP_ConnClose
*
* Description This function is called to close a connection.
*
* Returns BT_PASS - closed OK
* GAP_ERR_BAD_HANDLE - invalid handle
*
******************************************************************************/
extern uint16_t GAP_ConnClose(uint16_t gap_handle);
/*******************************************************************************
*
* Function GAP_ConnReadData
*
* Description GKI buffer unaware application will call this function
* after receiving GAP_EVT_RXDATA event. A data copy is made
* into the receive buffer parameter.
*
* Returns BT_PASS - data read
* GAP_ERR_BAD_HANDLE - invalid handle
* GAP_NO_DATA_AVAIL - no data available
*
******************************************************************************/
extern uint16_t GAP_ConnReadData(uint16_t gap_handle, uint8_t* p_data,
uint16_t max_len, uint16_t* p_len);
/*******************************************************************************
*
* Function GAP_GetRxQueueCnt
*
* Description This function return number of bytes on the rx queue.
*
* Parameters: handle - Handle returned in the GAP_ConnOpen
* p_rx_queue_count - Pointer to return queue count in.
*
*
******************************************************************************/
extern int GAP_GetRxQueueCnt(uint16_t handle, uint32_t* p_rx_queue_count);
/*******************************************************************************
*
* Function GAP_ConnBTRead
*
* Description GKI buffer aware applications will call this function after
* receiving an GAP_EVT_RXDATA event to process the incoming
* data buffer.
*
* Returns BT_PASS - data read
* GAP_ERR_BAD_HANDLE - invalid handle
* GAP_NO_DATA_AVAIL - no data available
*
******************************************************************************/
extern uint16_t GAP_ConnBTRead(uint16_t gap_handle, BT_HDR** pp_buf);
/*******************************************************************************
*
* Function GAP_ConnWriteData
*
* Description GKI buffer unaware application will call this function
* to send data to the connection. A data copy is made into a
* GKI buffer.
*
* Returns BT_PASS - data read
* GAP_ERR_BAD_HANDLE - invalid handle
* GAP_ERR_BAD_STATE - connection not established
* GAP_CONGESTION - system is congested
*
******************************************************************************/
extern uint16_t GAP_ConnWriteData(uint16_t gap_handle, BT_HDR* msg);
/*******************************************************************************
*
* Function GAP_ConnReconfig
*
* Description Applications can call this function to reconfigure the
* connection.
*
* Returns BT_PASS - config process started
* GAP_ERR_BAD_HANDLE - invalid handle
*
******************************************************************************/
extern uint16_t GAP_ConnReconfig(uint16_t gap_handle, tL2CAP_CFG_INFO* p_cfg);
/*******************************************************************************
*
* Function GAP_ConnSetIdleTimeout
*
* Description Higher layers call this function to set the idle timeout for
* a connection, or for all future connections. The "idle
* timeout" is the amount of time that a connection can remain
* up with no L2CAP channels on it. A timeout of zero means
* that the connection will be torn down immediately when the
* last channel is removed. A timeout of 0xFFFF means no
* timeout. Values are in seconds.
*
* Returns BT_PASS - config process started
* GAP_ERR_BAD_HANDLE - invalid handle
*
******************************************************************************/
extern uint16_t GAP_ConnSetIdleTimeout(uint16_t gap_handle, uint16_t timeout);
/*******************************************************************************
*
* Function GAP_ConnGetRemoteAddr
*
* Description This function is called to get the remote BD address
* of a connection.
*
* Returns BT_PASS - closed OK
* GAP_ERR_BAD_HANDLE - invalid handle
*
******************************************************************************/
extern const RawAddress* GAP_ConnGetRemoteAddr(uint16_t gap_handle);
/*******************************************************************************
*
* Function GAP_ConnGetRemMtuSize
*
* Description Returns the remote device's MTU size.
*
* Returns uint16_t - maximum size buffer that can be transmitted to
* the peer
*
******************************************************************************/
extern uint16_t GAP_ConnGetRemMtuSize(uint16_t gap_handle);
/*******************************************************************************
*
* Function GAP_ConnGetL2CAPCid
*
* Description Returns the L2CAP channel id
*
* Parameters: handle - Handle of the connection
*
* Returns uint16_t - The L2CAP channel id
* 0, if error
*
******************************************************************************/
extern uint16_t GAP_ConnGetL2CAPCid(uint16_t gap_handle);
/*******************************************************************************
*
* Function GAP_Init
*
* Description Initializes the control blocks used by GAP.
* This routine should not be called except once per
* stack invocation.
*
* Returns Nothing
*
******************************************************************************/
extern void GAP_Init(void);
/*******************************************************************************
*
* Function GAP_BleAttrDBUpdate
*
* Description update GAP local BLE attribute database.
*
* Returns Nothing
*
******************************************************************************/
extern void GAP_BleAttrDBUpdate(uint16_t attr_uuid,
tGAP_BLE_ATTR_VALUE* p_value);
/*******************************************************************************
*
* Function GAP_BleReadPeerPrefConnParams
*
* Description Start a process to read a connected peripheral's preferred
* connection parameters
*
* Returns true if read started, else false if GAP is busy
*
******************************************************************************/
extern bool GAP_BleReadPeerPrefConnParams(const RawAddress& peer_bda);
/*******************************************************************************
*
* Function GAP_BleReadPeerDevName
*
* Description Start a process to read a connected peripheral's device
* name.
*
* Returns true if request accepted
*
******************************************************************************/
extern bool GAP_BleReadPeerDevName(const RawAddress& peer_bda,
tGAP_BLE_CMPL_CBACK* p_cback);
/*******************************************************************************
*
* Function GAP_BleReadPeerAddressResolutionCap
*
* Description Start a process to read peer address resolution capability
*
* Returns true if request accepted
*
******************************************************************************/
extern bool GAP_BleReadPeerAddressResolutionCap(const RawAddress& peer_bda,
tGAP_BLE_CMPL_CBACK* p_cback);
/*******************************************************************************
*
* Function GAP_BleCancelReadPeerDevName
*
* Description Cancel reading a peripheral's device name.
*
* Returns true if request accepted
*
******************************************************************************/
extern bool GAP_BleCancelReadPeerDevName(const RawAddress& peer_bda);
#endif /* GAP_API_H */