| /****************************************************************************** | |
| * | |
| * 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 */ |