blob: 82a6c80b777c5715c70f5dcb86ae344188e923a6 [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 1999-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 file contains the Bluetooth Manager (BTM) API function external
* definitions.
*
******************************************************************************/
#ifndef BTM_API_H
#define BTM_API_H
#include "bt_target.h"
#include "sdp_api.h"
#include "hcidefs.h"
#include "smp_api.h"
#include "btm_api_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/*****************************************************************************
** DEVICE CONTROL and COMMON
*****************************************************************************/
/*****************************************************************************
** EXTERNAL FUNCTION DECLARATIONS
*****************************************************************************/
/*****************************************************************************
** DEVICE CONTROL and COMMON FUNCTIONS
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_DeviceReset
**
** Description This function is called to reset the controller.The Callback function
** if provided is called when startup of the device has
** completed.
**
** Returns void
**
*******************************************************************************/
extern void BTM_DeviceReset (tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_IsDeviceUp
**
** Description This function is called to check if the device is up.
**
** Returns true if device is up, else false
**
*******************************************************************************/
extern bool BTM_IsDeviceUp (void);
/*******************************************************************************
**
** Function BTM_SetLocalDeviceName
**
** Description This function is called to set the local device name.
**
** Returns BTM_CMD_STARTED if successful, otherwise an error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetLocalDeviceName (char *p_name);
/*******************************************************************************
**
** Function BTM_SetDeviceClass
**
** Description This function is called to set the local device class
**
** Returns BTM_SUCCESS if successful, otherwise an error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetDeviceClass (DEV_CLASS dev_class);
/*******************************************************************************
**
** Function BTM_ReadLocalDeviceName
**
** Description This function is called to read the local device name.
**
** Returns status of the operation
** If success, BTM_SUCCESS is returned and p_name points stored
** local device name
** If BTM doesn't store local device name, BTM_NO_RESOURCES is
** is returned and p_name is set to NULL
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadLocalDeviceName (char **p_name);
/*******************************************************************************
**
** Function BTM_ReadLocalDeviceNameFromController
**
** Description Get local device name from controller. Do not use cached
** name (used to get chip-id prior to btm reset complete).
**
** Returns BTM_CMD_STARTED if successful, otherwise an error
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadLocalDeviceNameFromController (tBTM_CMPL_CB *p_rln_cmpl_cback);
/*******************************************************************************
**
** Function BTM_ReadDeviceClass
**
** Description This function is called to read the local device class
**
** Returns pointer to the device class
**
*******************************************************************************/
extern uint8_t *BTM_ReadDeviceClass (void);
/*******************************************************************************
**
** Function BTM_ReadLocalFeatures
**
** Description This function is called to read the local features
**
** Returns pointer to the local features string
**
*******************************************************************************/
extern uint8_t *BTM_ReadLocalFeatures (void);
/*******************************************************************************
**
** Function BTM_RegisterForDeviceStatusNotif
**
** Description This function is called to register for device status
** change notifications.
**
** Returns pointer to previous caller's callback function or NULL if first
** registration.
**
*******************************************************************************/
extern tBTM_DEV_STATUS_CB *BTM_RegisterForDeviceStatusNotif (tBTM_DEV_STATUS_CB *p_cb);
/*******************************************************************************
**
** Function BTM_RegisterForVSEvents
**
** Description This function is called to register/deregister for vendor
** specific HCI events.
**
** If is_register=true, then the function will be registered;
** if is_register=false, then the function will be deregistered.
**
** Returns BTM_SUCCESS if successful,
** BTM_BUSY if maximum number of callbacks have already been
** registered.
**
*******************************************************************************/
extern tBTM_STATUS BTM_RegisterForVSEvents (tBTM_VS_EVT_CB *p_cb, bool is_register);
/*******************************************************************************
**
** Function BTM_VendorSpecificCommand
**
** Description Send a vendor specific HCI command to the controller.
**
*******************************************************************************/
extern void BTM_VendorSpecificCommand(uint16_t opcode,
uint8_t param_len,
uint8_t *p_param_buf,
tBTM_VSC_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_AllocateSCN
**
** Description Look through the Server Channel Numbers for a free one to be
** used with an RFCOMM connection.
**
** Returns Allocated SCN number or 0 if none.
**
*******************************************************************************/
extern uint8_t BTM_AllocateSCN(void);
/*******************************************************************************
**
** Function BTM_TryAllocateSCN
**
** Description Try to allocate a fixed server channel
**
** Returns Returns true if server channel was available
**
*******************************************************************************/
extern bool BTM_TryAllocateSCN(uint8_t scn);
/*******************************************************************************
**
** Function BTM_FreeSCN
**
** Description Free the specified SCN.
**
** Returns true if successful, false if SCN is not in use or invalid
**
*******************************************************************************/
extern bool BTM_FreeSCN(uint8_t scn);
/*******************************************************************************
**
** Function BTM_SetTraceLevel
**
** Description This function sets the trace level for BTM. If called with
** a value of 0xFF, it simply returns the current trace level.
**
** Returns The new or current trace level
**
*******************************************************************************/
extern uint8_t BTM_SetTraceLevel (uint8_t new_level);
/*******************************************************************************
**
** Function BTM_WritePageTimeout
**
** Description Send HCI Wite Page Timeout.
**
*******************************************************************************/
extern void BTM_WritePageTimeout(uint16_t timeout);
/*******************************************************************************
**
** Function BTM_WriteVoiceSettings
**
** Description Send HCI Write Voice Settings command.
** See hcidefs.h for settings bitmask values.
**
*******************************************************************************/
extern void BTM_WriteVoiceSettings(uint16_t settings);
/*******************************************************************************
**
** Function BTM_EnableTestMode
**
** Description Send HCI the enable device under test command.
**
** Note: Controller can only be taken out of this mode by
** resetting the controller.
**
** Returns
** BTM_SUCCESS Command sent.
** BTM_NO_RESOURCES If out of resources to send the command.
**
**
*******************************************************************************/
extern tBTM_STATUS BTM_EnableTestMode(void);
/*****************************************************************************
** DEVICE DISCOVERY FUNCTIONS - Inquiry, Remote Name, Discovery, Class of Device
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_SetDiscoverability
**
** Description This function is called to set the device into or out of
** discoverable mode. Discoverable mode means inquiry
** scans are enabled. If a value of '0' is entered for window or
** interval, the default values are used.
**
** Returns BTM_SUCCESS if successful
** BTM_BUSY if a setting of the filter is already in progress
** BTM_NO_RESOURCES if couldn't get a memory pool buffer
** BTM_ILLEGAL_VALUE if a bad parameter was detected
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetDiscoverability (uint16_t inq_mode, uint16_t window,
uint16_t interval);
/*******************************************************************************
**
** Function BTM_ReadDiscoverability
**
** Description This function is called to read the current discoverability
** mode of the device.
**
** Output Params: p_window - current inquiry scan duration
** p_interval - current inquiry scan interval
**
** Returns BTM_NON_DISCOVERABLE, BTM_LIMITED_DISCOVERABLE, or
** BTM_GENERAL_DISCOVERABLE
**
*******************************************************************************/
extern uint16_t BTM_ReadDiscoverability (uint16_t *p_window,
uint16_t *p_interval);
/*******************************************************************************
**
** Function BTM_SetPeriodicInquiryMode
**
** Description This function is called to set the device periodic inquiry mode.
** If the duration is zero, the periodic inquiry mode is cancelled.
**
** Parameters: p_inqparms - pointer to the inquiry information
** mode - GENERAL or LIMITED inquiry
** duration - length in 1.28 sec intervals (If '0', the inquiry is CANCELLED)
** max_resps - maximum amount of devices to search for before ending the inquiry
** filter_cond_type - BTM_CLR_INQUIRY_FILTER, BTM_FILTER_COND_DEVICE_CLASS, or
** BTM_FILTER_COND_BD_ADDR
** filter_cond - value for the filter (based on filter_cond_type)
**
** max_delay - maximum amount of time between successive inquiries
** min_delay - minimum amount of time between successive inquiries
** p_results_cb - callback returning pointer to results (tBTM_INQ_RESULTS)
**
** Returns BTM_CMD_STARTED if successfully started
** BTM_ILLEGAL_VALUE if a bad parameter is detected
** BTM_NO_RESOURCES if could not allocate a message buffer
** BTM_SUCCESS - if cancelling the periodic inquiry
** BTM_BUSY - if an inquiry is already active
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetPeriodicInquiryMode (tBTM_INQ_PARMS *p_inqparms,
uint16_t max_delay, uint16_t min_delay,
tBTM_INQ_RESULTS_CB *p_results_cb);
/*******************************************************************************
**
** Function BTM_StartInquiry
**
** Description This function is called to start an inquiry.
**
** Parameters: p_inqparms - pointer to the inquiry information
** mode - GENERAL or LIMITED inquiry
** duration - length in 1.28 sec intervals (If '0', the inquiry is CANCELLED)
** max_resps - maximum amount of devices to search for before ending the inquiry
** filter_cond_type - BTM_CLR_INQUIRY_FILTER, BTM_FILTER_COND_DEVICE_CLASS, or
** BTM_FILTER_COND_BD_ADDR
** filter_cond - value for the filter (based on filter_cond_type)
**
** p_results_cb - Pointer to the callback routine which gets called
** upon receipt of an inquiry result. If this field is
** NULL, the application is not notified.
**
** p_cmpl_cb - Pointer to the callback routine which gets called
** upon completion. If this field is NULL, the
** application is not notified when completed.
** Returns tBTM_STATUS
** BTM_CMD_STARTED if successfully initiated
** BTM_BUSY if already in progress
** BTM_ILLEGAL_VALUE if parameter(s) are out of range
** BTM_NO_RESOURCES if could not allocate resources to start the command
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms,
tBTM_INQ_RESULTS_CB *p_results_cb,
tBTM_CMPL_CB *p_cmpl_cb);
/*******************************************************************************
**
** Function BTM_IsInquiryActive
**
** Description This function returns a bit mask of the current inquiry state
**
** Returns BTM_INQUIRY_INACTIVE if inactive (0)
** BTM_LIMITED_INQUIRY_ACTIVE if a limted inquiry is active
** BTM_GENERAL_INQUIRY_ACTIVE if a general inquiry is active
** BTM_PERIODIC_INQUIRY_ACTIVE if a periodic inquiry is active
**
*******************************************************************************/
extern uint16_t BTM_IsInquiryActive (void);
/*******************************************************************************
**
** Function BTM_CancelInquiry
**
** Description This function cancels an inquiry if active
**
** Returns BTM_SUCCESS if successful
** BTM_NO_RESOURCES if could not allocate a message buffer
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_CancelInquiry(void);
/*******************************************************************************
**
** Function BTM_CancelPeriodicInquiry
**
** Description This function cancels a periodic inquiry
**
** Returns
** BTM_NO_RESOURCES if could not allocate a message buffer
** BTM_SUCCESS - if cancelling the periodic inquiry
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_CancelPeriodicInquiry(void);
/*******************************************************************************
**
** Function BTM_SetConnectability
**
** Description This function is called to set the device into or out of
** connectable mode. Discoverable mode means page scans enabled.
**
** Returns BTM_SUCCESS if successful
** BTM_ILLEGAL_VALUE if a bad parameter is detected
** BTM_NO_RESOURCES if could not allocate a message buffer
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetConnectability (uint16_t page_mode, uint16_t window,
uint16_t interval);
/*******************************************************************************
**
** Function BTM_ReadConnectability
**
** Description This function is called to read the current discoverability
** mode of the device.
** Output Params p_window - current page scan duration
** p_interval - current time between page scans
**
** Returns BTM_NON_CONNECTABLE or BTM_CONNECTABLE
**
*******************************************************************************/
extern uint16_t BTM_ReadConnectability (uint16_t *p_window, uint16_t *p_interval);
/*******************************************************************************
**
** Function BTM_SetInquiryMode
**
** Description This function is called to set standard, with RSSI
** mode or extended of the inquiry for local device.
**
** Input Params: BTM_INQ_RESULT_STANDARD, BTM_INQ_RESULT_WITH_RSSI or
** BTM_INQ_RESULT_EXTENDED
**
** Returns BTM_SUCCESS if successful
** BTM_NO_RESOURCES if couldn't get a memory pool buffer
** BTM_ILLEGAL_VALUE if a bad parameter was detected
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetInquiryMode (uint8_t mode);
/*******************************************************************************
**
** Function BTM_SetInquiryScanType
**
** Description This function is called to set the iquiry scan-type to
** standard or interlaced.
**
** Input Params: BTM_SCAN_TYPE_STANDARD or BTM_SCAN_TYPE_INTERLACED
**
** Returns BTM_SUCCESS if successful
** BTM_MODE_UNSUPPORTED if not a 1.2 device
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetInquiryScanType (uint16_t scan_type);
/*******************************************************************************
**
** Function BTM_SetPageScanType
**
** Description This function is called to set the page scan-type to
** standard or interlaced.
**
** Input Params: BTM_SCAN_TYPE_STANDARD or BTM_SCAN_TYPE_INTERLACED
**
** Returns BTM_SUCCESS if successful
** BTM_MODE_UNSUPPORTED if not a 1.2 device
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetPageScanType (uint16_t scan_type);
/*******************************************************************************
**
** Function BTM_ReadRemoteDeviceName
**
** Description This function initiates a remote device HCI command to the
** controller and calls the callback when the process has completed.
**
** Input Params: remote_bda - device address of name to retrieve
** p_cb - callback function called when BTM_CMD_STARTED
** is returned.
** A pointer to tBTM_REMOTE_DEV_NAME is passed to the
** callback.
**
** Returns
** BTM_CMD_STARTED is returned if the request was successfully sent
** to HCI.
** BTM_BUSY if already in progress
** BTM_UNKNOWN_ADDR if device address is bad
** BTM_NO_RESOURCES if could not allocate resources to start the command
** BTM_WRONG_MODE if the device is not up.
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadRemoteDeviceName (BD_ADDR remote_bda,
tBTM_CMPL_CB *p_cb,
tBT_TRANSPORT transport);
/*******************************************************************************
**
** Function BTM_CancelRemoteDeviceName
**
** Description This function initiates the cancel request for the specified
** remote device.
**
** Input Params: None
**
** Returns
** BTM_CMD_STARTED is returned if the request was successfully sent
** to HCI.
** BTM_NO_RESOURCES if could not allocate resources to start the command
** BTM_WRONG_MODE if there is not an active remote name request.
**
*******************************************************************************/
extern tBTM_STATUS BTM_CancelRemoteDeviceName (void);
/*******************************************************************************
**
** Function BTM_ReadRemoteVersion
**
** Description This function is called to read a remote device's version
**
** Returns BTM_SUCCESS if successful, otherwise an error
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadRemoteVersion (BD_ADDR addr,
uint8_t *lmp_version,
uint16_t *manufacturer,
uint16_t *lmp_sub_version);
/*******************************************************************************
**
** Function BTM_ReadRemoteFeatures
**
** Description This function is called to read a remote device's
** supported features mask (features mask located at page 0)
**
** Note: The size of device features mask page is
** BTM_FEATURE_BYTES_PER_PAGE bytes.
**
** Returns pointer to the remote supported features mask
**
*******************************************************************************/
extern uint8_t *BTM_ReadRemoteFeatures (BD_ADDR addr);
/*******************************************************************************
**
** Function BTM_ReadRemoteExtendedFeatures
**
** Description This function is called to read a specific extended features
** page of the remote device
**
** Note1: The size of device features mask page is
** BTM_FEATURE_BYTES_PER_PAGE bytes.
** Note2: The valid device features mask page number depends on
** the remote device capabilities. It is expected to be in the
** range [0 - BTM_EXT_FEATURES_PAGE_MAX].
** Returns pointer to the remote extended features mask
** or NULL if page_number is not valid
**
*******************************************************************************/
extern uint8_t *BTM_ReadRemoteExtendedFeatures (BD_ADDR addr, uint8_t page_number);
/*******************************************************************************
**
** Function BTM_ReadNumberRemoteFeaturesPages
**
** Description This function is called to retrieve the number of feature pages
** read from the remote device
**
** Returns number of features pages read from the remote device
**
*******************************************************************************/
extern uint8_t BTM_ReadNumberRemoteFeaturesPages (BD_ADDR addr);
/*******************************************************************************
**
** Function BTM_ReadAllRemoteFeatures
**
** Description This function is called to read all features of the remote device
**
** Returns pointer to the byte[0] of the page[0] of the remote device
** feature mask.
**
** Note: the function returns the pointer to the array of the size
** BTM_FEATURE_BYTES_PER_PAGE * (BTM_EXT_FEATURES_PAGE_MAX + 1).
**
*******************************************************************************/
extern uint8_t *BTM_ReadAllRemoteFeatures (BD_ADDR addr);
/*******************************************************************************
**
** Function BTM_InqDbRead
**
** Description This function looks through the inquiry database for a match
** based on Bluetooth Device Address. This is the application's
** interface to get the inquiry details of a specific BD address.
**
** Returns pointer to entry, or NULL if not found
**
*******************************************************************************/
extern tBTM_INQ_INFO *BTM_InqDbRead (const BD_ADDR p_bda);
/*******************************************************************************
**
** Function BTM_InqDbFirst
**
** Description This function looks through the inquiry database for the first
** used entry, and returns that. This is used in conjunction with
** BTM_InqDbNext by applications as a way to walk through the
** inquiry database.
**
** Returns pointer to first in-use entry, or NULL if DB is empty
**
*******************************************************************************/
extern tBTM_INQ_INFO *BTM_InqDbFirst (void);
/*******************************************************************************
**
** Function BTM_InqDbNext
**
** Description This function looks through the inquiry database for the next
** used entry, and returns that. If the input parameter is NULL,
** the first entry is returned.
**
** Returns pointer to next in-use entry, or NULL if no more found.
**
*******************************************************************************/
extern tBTM_INQ_INFO *BTM_InqDbNext (tBTM_INQ_INFO *p_cur);
/*******************************************************************************
**
** Function BTM_ClearInqDb
**
** Description This function is called to clear out a device or all devices
** from the inquiry database.
**
** Parameter p_bda - (input) BD_ADDR -> Address of device to clear
** (NULL clears all entries)
**
** Returns BTM_BUSY if an inquiry, get remote name, or event filter
** is active, otherwise BTM_SUCCESS
**
*******************************************************************************/
extern tBTM_STATUS BTM_ClearInqDb (BD_ADDR p_bda);
/*******************************************************************************
**
** Function BTM_ReadInquiryRspTxPower
**
** Description This command will read the inquiry Transmit Power level used
** to transmit the FHS and EIR data packets.
** This can be used directly in the Tx Power Level EIR data type.
**
** Returns BTM_SUCCESS if successful
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadInquiryRspTxPower (tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_StartDiscovery
**
** Description This function is called by an application (or profile)
** when it wants to trigger an service discovery using the
** BTM's discovery database.
**
** Returns tBTM_STATUS
** BTM_CMD_STARTED if the discovery was initiated
** BTM_BUSY if one is already in progress
** BTM_UNKNOWN_ADDR if no addresses are in the INQ DB
** BTM_ERR_PROCESSING if err initiating the command
**
*******************************************************************************/
extern tBTM_STATUS BTM_StartDiscovery (tBTM_CMPL_CB *p_cmpl_cb,
BD_ADDR_PTR p_rem_addr);
/*******************************************************************************
**
** Function BTM_FindAttribute
**
** Description This function is called by an application (or profile)
** when it wants to see if an attribute exists in the BTM
** discovery database.
**
** Returns Pointer to matching record, or NULL
**
*******************************************************************************/
extern tSDP_DISC_REC *BTM_FindAttribute (uint16_t attr_id,
tSDP_DISC_REC *p_start_rec);
/*******************************************************************************
**
** Function BTM_FindService
**
** Description This function is called by an application (or profile)
** when it wants to see if a service exists in the BTM
** discovery database.
**
** Returns Pointer to matching record, or NULL
**
*******************************************************************************/
extern tSDP_DISC_REC *BTM_FindService (uint16_t service_uuid,
tSDP_DISC_REC *p_start_rec);
/*******************************************************************************
**
** Function BTM_SetDiscoveryParams
**
** Description This function is called to set the BTM default discovery parameters.
** These UUID and attribute filters are used during the call to
** BTM_StartDiscovery.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetDiscoveryParams (uint16_t num_uuid, tSDP_UUID *p_uuid_list,
uint16_t num_attr, uint16_t *p_attr_list);
/*****************************************************************************
** ACL CHANNEL MANAGEMENT FUNCTIONS
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_SetLinkPolicy
**
** Description Create and send HCI "Write Policy Set" command
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetLinkPolicy (BD_ADDR remote_bda,
uint16_t *settings);
/*******************************************************************************
**
** Function BTM_SetDefaultLinkPolicy
**
** Description Set the default value for HCI "Write Policy Set" command
** to use when an ACL link is created.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetDefaultLinkPolicy (uint16_t settings);
/*******************************************************************************
**
** Function BTM_SetDefaultLinkSuperTout
**
** Description Set the default value for HCI "Write Link Supervision Timeout"
** command to use when an ACL link is created.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetDefaultLinkSuperTout (uint16_t timeout);
/*******************************************************************************
**
** Function BTM_SetLinkSuperTout
**
** Description Create and send HCI "Write Link Supervision Timeout" command
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetLinkSuperTout (BD_ADDR remote_bda,
uint16_t timeout);
/*******************************************************************************
**
** Function BTM_GetLinkSuperTout
**
** Description Read the link supervision timeout value of the connection
**
** Returns status of the operation
**
*******************************************************************************/
extern tBTM_STATUS BTM_GetLinkSuperTout (BD_ADDR remote_bda,
uint16_t *p_timeout);
/*******************************************************************************
**
** Function BTM_IsAclConnectionUp
**
** Description This function is called to check if an ACL connection exists
** to a specific remote BD Address.
**
** Returns true if connection is up, else false.
**
*******************************************************************************/
extern bool BTM_IsAclConnectionUp (BD_ADDR remote_bda, tBT_TRANSPORT transport);
/*******************************************************************************
**
** Function BTM_GetRole
**
** Description This function is called to get the role of the local device
** for the ACL connection with the specified remote device
**
** Returns BTM_SUCCESS if connection exists.
** BTM_UNKNOWN_ADDR if no active link with bd addr specified
**
*******************************************************************************/
extern tBTM_STATUS BTM_GetRole (BD_ADDR remote_bd_addr, uint8_t *p_role);
/*******************************************************************************
**
** Function BTM_SwitchRole
**
** Description This function is called to switch role between master and
** slave. If role is already set it will do nothing. If the
** command was initiated, the callback function is called upon
** completion.
**
** Returns BTM_SUCCESS if already in specified role.
** BTM_CMD_STARTED if command issued to controller.
** BTM_NO_RESOURCES if couldn't allocate memory to issue command
** BTM_UNKNOWN_ADDR if no active link with bd addr specified
** BTM_MODE_UNSUPPORTED if local device does not support role switching
**
*******************************************************************************/
extern tBTM_STATUS BTM_SwitchRole (BD_ADDR remote_bd_addr,
uint8_t new_role,
tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_ReadRSSI
**
** Description This function is called to read the link policy settings.
** The address of link policy results are returned in the callback.
** (tBTM_RSSI_RESULTS)
**
** Returns BTM_CMD_STARTED if command issued to controller.
** BTM_NO_RESOURCES if couldn't allocate memory to issue command
** BTM_UNKNOWN_ADDR if no active link with bd addr specified
** BTM_BUSY if command is already in progress
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadRSSI (const BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_ReadTxPower
**
** Description This function is called to read the current connection
** TX power of the connection. The TX power level results
** are returned in the callback.
** (tBTM_RSSI_RESULTS)
**
** Returns BTM_CMD_STARTED if command issued to controller.
** BTM_NO_RESOURCES if couldn't allocate memory to issue command
** BTM_UNKNOWN_ADDR if no active link with bd addr specified
** BTM_BUSY if command is already in progress
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadTxPower (BD_ADDR remote_bda,
tBT_TRANSPORT transport, tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_ReadLinkQuality
**
** Description This function is called to read the link quality.
** The value of the link quality is returned in the callback.
** (tBTM_LINK_QUALITY_RESULTS)
**
** Returns BTM_CMD_STARTED if command issued to controller.
** BTM_NO_RESOURCES if couldn't allocate memory to issue command
** BTM_UNKNOWN_ADDR if no active link with bd addr specified
** BTM_BUSY if command is already in progress
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadLinkQuality (BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_RegBusyLevelNotif
**
** Description This function is called to register a callback to receive
** busy level change events.
**
** Returns BTM_SUCCESS if successfully registered, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_RegBusyLevelNotif (tBTM_BL_CHANGE_CB *p_cb, uint8_t *p_level,
tBTM_BL_EVENT_MASK evt_mask);
/*******************************************************************************
**
** Function BTM_AclRegisterForChanges
**
** Description This function is called to register a callback to receive
** ACL database change events, i.e. new connection or removed.
**
** Returns BTM_SUCCESS if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_AclRegisterForChanges (tBTM_ACL_DB_CHANGE_CB *p_cb);
/*******************************************************************************
**
** Function BTM_GetNumAclLinks
**
** Description This function is called to count the number of
** ACL links that are active.
**
** Returns uint16_t Number of active ACL links
**
*******************************************************************************/
extern uint16_t BTM_GetNumAclLinks (void);
/*******************************************************************************
**
** Function BTM_SetQoS
**
** Description This function is called to setup QoS
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetQoS(BD_ADDR bd, FLOW_SPEC *p_flow,
tBTM_CMPL_CB *p_cb);
/*****************************************************************************
** (e)SCO CHANNEL MANAGEMENT FUNCTIONS
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_CreateSco
**
** Description This function is called to create an SCO connection. If the
** "is_orig" flag is true, the connection will be originated,
** otherwise BTM will wait for the other side to connect.
**
** Returns BTM_UNKNOWN_ADDR if the ACL connection is not up
** BTM_BUSY if another SCO being set up to
** the same BD address
** BTM_NO_RESOURCES if the max SCO limit has been reached
** BTM_CMD_STARTED if the connection establishment is started.
** In this case, "*p_sco_inx" is filled in
** with the sco index used for the connection.
**
*******************************************************************************/
extern tBTM_STATUS BTM_CreateSco (BD_ADDR remote_bda, bool is_orig,
uint16_t pkt_types, uint16_t *p_sco_inx,
tBTM_SCO_CB *p_conn_cb,
tBTM_SCO_CB *p_disc_cb);
/*******************************************************************************
**
** Function BTM_RemoveSco
**
** Description This function is called to remove a specific SCO connection.
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_RemoveSco (uint16_t sco_inx);
/*******************************************************************************
**
** Function BTM_SetScoPacketTypes
**
** Description This function is called to set the packet types used for
** a specific SCO connection,
**
** Parameters pkt_types - One or more of the following
** BTM_SCO_PKT_TYPES_MASK_HV1
** BTM_SCO_PKT_TYPES_MASK_HV2
** BTM_SCO_PKT_TYPES_MASK_HV3
** BTM_SCO_PKT_TYPES_MASK_EV3
** BTM_SCO_PKT_TYPES_MASK_EV4
** BTM_SCO_PKT_TYPES_MASK_EV5
**
** BTM_SCO_LINK_ALL_MASK - enables all supported types
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetScoPacketTypes (uint16_t sco_inx, uint16_t pkt_types);
/*******************************************************************************
**
** Function BTM_ReadScoPacketTypes
**
** Description This function is read the packet types used for a specific
** SCO connection.
**
** Returns One or more of the following (bitmask)
** BTM_SCO_PKT_TYPES_MASK_HV1
** BTM_SCO_PKT_TYPES_MASK_HV2
** BTM_SCO_PKT_TYPES_MASK_HV3
** BTM_SCO_PKT_TYPES_MASK_EV3
** BTM_SCO_PKT_TYPES_MASK_EV4
** BTM_SCO_PKT_TYPES_MASK_EV5
**
** Returns packet types supported for the connection
**
*******************************************************************************/
extern uint16_t BTM_ReadScoPacketTypes (uint16_t sco_inx);
/*******************************************************************************
**
** Function BTM_ReadDeviceScoPacketTypes
**
** Description This function is read the SCO packet types that
** the device supports.
**
** Returns packet types supported by the device.
**
*******************************************************************************/
extern uint16_t BTM_ReadDeviceScoPacketTypes (void);
/*******************************************************************************
**
** Function BTM_ReadScoHandle
**
** Description This function is used to read the HCI handle used for a specific
** SCO connection,
**
** Returns handle for the connection, or 0xFFFF if invalid SCO index.
**
*******************************************************************************/
extern uint16_t BTM_ReadScoHandle (uint16_t sco_inx);
/*******************************************************************************
**
** Function BTM_ReadScoBdAddr
**
** Description This function is read the remote BD Address for a specific
** SCO connection,
**
** Returns pointer to BD address or NULL if not known
**
*******************************************************************************/
extern uint8_t *BTM_ReadScoBdAddr (uint16_t sco_inx);
/*******************************************************************************
**
** Function BTM_ReadScoDiscReason
**
** Description This function is returns the reason why an (e)SCO connection
** has been removed. It contains the value until read, or until
** another (e)SCO connection has disconnected.
**
** Returns HCI reason or BTM_INVALID_SCO_DISC_REASON if not set.
**
*******************************************************************************/
extern uint16_t BTM_ReadScoDiscReason (void);
/*******************************************************************************
**
** Function BTM_SetEScoMode
**
** Description This function sets up the negotiated parameters for SCO or
** eSCO, and sets as the default mode used for calls to
** BTM_CreateSco. It can be called only when there are no
** active (e)SCO links.
**
** Returns BTM_SUCCESS if the successful.
** BTM_BUSY if there are one or more active (e)SCO links.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetEScoMode (tBTM_SCO_TYPE sco_mode,
tBTM_ESCO_PARAMS *p_parms);
/*******************************************************************************
**
** Function BTM_SetWBSCodec
**
** Description This function sends command to the controller to setup
** WBS codec for the upcoming eSCO connection.
**
** Returns BTM_SUCCESS.
**
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetWBSCodec (tBTM_SCO_CODEC_TYPE codec_type);
/*******************************************************************************
**
** Function BTM_RegForEScoEvts
**
** Description This function registers a SCO event callback with the
** specified instance. It should be used to received
** connection indication events and change of link parameter
** events.
**
** Returns BTM_SUCCESS if the successful.
** BTM_ILLEGAL_VALUE if there is an illegal sco_inx
**
*******************************************************************************/
extern tBTM_STATUS BTM_RegForEScoEvts (uint16_t sco_inx,
tBTM_ESCO_CBACK *p_esco_cback);
/*******************************************************************************
**
** Function BTM_ReadEScoLinkParms
**
** Description This function returns the current eSCO link parameters for
** the specified handle. This can be called anytime a connection
** is active, but is typically called after receiving the SCO
** opened callback.
**
** Note: If called over a 1.1 controller, only the packet types
** field has meaning.
** Note: If the upper layer doesn't know the current sco index,
** BTM_FIRST_ACTIVE_SCO_INDEX can be used as the first parameter to
** find the first active SCO index
**
** Returns BTM_SUCCESS if returned data is valid connection.
** BTM_ILLEGAL_VALUE if no connection for specified sco_inx.
** BTM_MODE_UNSUPPORTED if local controller does not support
** 1.2 specification.
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadEScoLinkParms (uint16_t sco_inx,
tBTM_ESCO_DATA *p_parms);
/*******************************************************************************
**
** Function BTM_ChangeEScoLinkParms
**
** Description This function requests renegotiation of the parameters on
** the current eSCO Link. If any of the changes are accepted
** by the controllers, the BTM_ESCO_CHG_EVT event is sent in
** the tBTM_ESCO_CBACK function with the current settings of
** the link. The callback is registered through the call to
** BTM_SetEScoMode.
**
**
** Returns BTM_CMD_STARTED if command is successfully initiated.
** BTM_ILLEGAL_VALUE if no connection for specified sco_inx.
** BTM_NO_RESOURCES - not enough resources to initiate command.
** BTM_MODE_UNSUPPORTED if local controller does not support
** 1.2 specification.
**
*******************************************************************************/
extern tBTM_STATUS BTM_ChangeEScoLinkParms (uint16_t sco_inx,
tBTM_CHG_ESCO_PARAMS *p_parms);
/*******************************************************************************
**
** Function BTM_EScoConnRsp
**
** Description This function is called upon receipt of an (e)SCO connection
** request event (BTM_ESCO_CONN_REQ_EVT) to accept or reject
** the request. Parameters used to negotiate eSCO links.
** If p_parms is NULL, then values set through BTM_SetEScoMode
** are used.
** If the link type of the incoming request is SCO, then only
** the tx_bw, max_latency, content format, and packet_types are
** valid. The hci_status parameter should be
** ([0x0] to accept, [0x0d..0x0f] to reject)
**
**
** Returns void
**
*******************************************************************************/
extern void BTM_EScoConnRsp (uint16_t sco_inx, uint8_t hci_status,
tBTM_ESCO_PARAMS *p_parms);
/*******************************************************************************
**
** Function BTM_GetNumScoLinks
**
** Description This function returns the number of active SCO links.
**
** Returns uint8_t
**
*******************************************************************************/
extern uint8_t BTM_GetNumScoLinks (void);
/*****************************************************************************
** SECURITY MANAGEMENT FUNCTIONS
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_SecRegister
**
** Description Application manager calls this function to register for
** security services. There can be one and only one application
** saving link keys. BTM allows only first registration.
**
** Returns true if registered OK, else false
**
*******************************************************************************/
extern bool BTM_SecRegister (tBTM_APPL_INFO *p_cb_info);
/*******************************************************************************
**
** Function BTM_SecRegisterLinkKeyNotificationCallback
**
** Description Profiles can register to be notified when a new Link Key
** is generated per connection.
**
** Returns true if registered OK, else false
**
*******************************************************************************/
extern bool BTM_SecRegisterLinkKeyNotificationCallback(
tBTM_LINK_KEY_CALLBACK *p_callback);
/*******************************************************************************
**
** Function BTM_SecAddRmtNameNotifyCallback
**
** Description Profiles can register to be notified when name of the
** remote device is resolved (up to BTM_SEC_MAX_RMT_NAME_CALLBACKS).
**
** Returns true if registered OK, else false
**
*******************************************************************************/
extern bool BTM_SecAddRmtNameNotifyCallback (tBTM_RMT_NAME_CALLBACK *p_callback);
/*******************************************************************************
**
** Function BTM_SecDeleteRmtNameNotifyCallback
**
** Description A profile can deregister notification when a new Link Key
** is generated per connection.
**
** Returns true if OK, else false
**
*******************************************************************************/
extern bool BTM_SecDeleteRmtNameNotifyCallback (tBTM_RMT_NAME_CALLBACK *p_callback);
/*******************************************************************************
**
** Function BTM_GetSecurityFlags
**
** Description Get security flags for the device
**
** Returns bool true or false is device found
**
*******************************************************************************/
extern bool BTM_GetSecurityFlags (BD_ADDR bd_addr, uint8_t * p_sec_flags);
/*******************************************************************************
**
** Function BTM_GetSecurityFlagsByTransport
**
** Description Get security flags for the device on a particular transport
**
** Parameters bd_addr: BD address of remote device
** p_sec_flags : Out parameter to be filled with security flags for the connection
** transport : Physical transport of the connection (BR/EDR or LE)
**
** Returns bool true or false is device found
**
*******************************************************************************/
extern bool BTM_GetSecurityFlagsByTransport (BD_ADDR bd_addr,
uint8_t * p_sec_flags, tBT_TRANSPORT transport);
/*******************************************************************************
**
** Function BTM_ReadTrustedMask
**
** Description Get trusted mask for the device
**
** Returns NULL, if the device record is not found.
** otherwise, the trusted mask
**
*******************************************************************************/
extern uint32_t * BTM_ReadTrustedMask (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_SetPinType
**
** Description Set PIN type for the device.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetPinType (uint8_t pin_type, PIN_CODE pin_code, uint8_t pin_code_len);
/*******************************************************************************
**
** Function BTM_SetPairableMode
**
** Description Enable or disable pairing
**
** Parameters allow_pairing - (true or false) whether or not the device
** allows pairing.
** connect_only_paired - (true or false) whether or not to
** only allow paired devices to connect.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetPairableMode (bool allow_pairing, bool connect_only_paired);
/*******************************************************************************
**
** Function BTM_SetSecureConnectionsOnly
**
** Description Enable or disable default treatment for Mode 4 Level 0 services
**
** Parameter secure_connections_only_mode - (true or false)
** true means that the device should treat Mode 4 Level 0 services as
** services of other levels.
** false means that the device should provide default treatment for
** Mode 4 Level 0 services.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetSecureConnectionsOnly (bool secure_connections_only_mode);
/*******************************************************************************
**
** Function BTM_SetSecurityLevel
**
** Description Register service security level with Security Manager. Each
** service must register its requirements regardless of the
** security level that is used. This API is called once for originators
** nad again for acceptors of connections.
**
** Returns true if registered OK, else false
**
*******************************************************************************/
extern bool BTM_SetSecurityLevel (bool is_originator, const char *p_name,
uint8_t service_id, uint16_t sec_level,
uint16_t psm, uint32_t mx_proto_id,
uint32_t mx_chan_id);
/*******************************************************************************
**
** Function BTM_SetOutService
**
** Description This function is called to set the service for
** outgoing connection.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetOutService(BD_ADDR bd_addr, uint8_t service_id, uint32_t mx_chan_id);
/*******************************************************************************
**
** Function BTM_SecClrService
**
** Description Removes specified service record(s) from the security database.
** All service records with the specified name are removed.
** Typically used only by devices with limited RAM so that it can
** reuse an old security service record.
** records (except SDP).
**
** Returns Number of records that were freed.
**
*******************************************************************************/
extern uint8_t BTM_SecClrService (uint8_t service_id);
/*******************************************************************************
**
** Function BTM_SecAddDevice
**
** Description Add/modify device. This function will be normally called
** during host startup to restore all required information
** stored in the NVRAM.
** dev_class, bd_name, link_key, and features are NULL if unknown
**
** Returns true if added OK, else false
**
*******************************************************************************/
extern bool BTM_SecAddDevice (BD_ADDR bd_addr, DEV_CLASS dev_class,
BD_NAME bd_name, uint8_t *features,
uint32_t trusted_mask[], LINK_KEY link_key,
uint8_t key_type, tBTM_IO_CAP io_cap, uint8_t pin_length);
/*******************************************************************************
**
** Function BTM_SecDeleteDevice
**
** Description Free resources associated with the device.
**
** Returns true if rmoved OK, false if not found
**
*******************************************************************************/
extern bool BTM_SecDeleteDevice (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_SecClearSecurityFlags
**
** Description Reset the security flags (mark as not-paired) for a given
** remove device.
**
*******************************************************************************/
extern void BTM_SecClearSecurityFlags (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_SecGetDeviceLinkKey
**
** Description This function is called to obtain link key for the device
** it returns BTM_SUCCESS if link key is available, or
** BTM_UNKNOWN_ADDR if Security Manager does not know about
** the device or device record does not contain link key info
**
** Returns BTM_SUCCESS if successful, otherwise error code
**
*******************************************************************************/
extern tBTM_STATUS BTM_SecGetDeviceLinkKey (BD_ADDR bd_addr,
LINK_KEY link_key);
/*******************************************************************************
**
** Function BTM_SecGetDeviceLinkKeyType
**
** Description This function is called to obtain link key type for the
** device.
** it returns BTM_SUCCESS if link key is available, or
** BTM_UNKNOWN_ADDR if Security Manager does not know about
** the device or device record does not contain link key info
**
** Returns BTM_LKEY_TYPE_IGNORE if link key is unknown, link type
** otherwise.
**
*******************************************************************************/
extern tBTM_LINK_KEY_TYPE BTM_SecGetDeviceLinkKeyType (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_PINCodeReply
**
** Description This function is called after Security Manager submitted
** PIN code request to the UI.
**
** Parameters: bd_addr - Address of the device for which PIN was requested
** res - result of the operation BTM_SUCCESS if success
** pin_len - length in bytes of the PIN Code
** p_pin - pointer to array with the PIN Code
** trusted_mask - bitwise OR of trusted services (array of uint32_t)
**
** Returns void
**
*******************************************************************************/
extern void BTM_PINCodeReply (BD_ADDR bd_addr, uint8_t res, uint8_t pin_len,
uint8_t *p_pin, uint32_t trusted_mask[]);
/*******************************************************************************
**
** Function BTM_SecBond
**
** Description This function is called to perform bonding with peer device.
**
** Parameters: bd_addr - Address of the device to bond
** pin_len - length in bytes of the PIN Code
** p_pin - pointer to array with the PIN Code
** trusted_mask - bitwise OR of trusted services (array of uint32_t)
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SecBond (BD_ADDR bd_addr,
uint8_t pin_len, uint8_t *p_pin,
uint32_t trusted_mask[]);
/*******************************************************************************
**
** Function BTM_SecBondByTransport
**
** Description This function is called to perform bonding by designated transport
**
** Parameters: bd_addr - Address of the device to bond
** pin_len - length in bytes of the PIN Code
** p_pin - pointer to array with the PIN Code
** trusted_mask - bitwise OR of trusted services (array of uint32_t)
** transport : Physical transport to use for bonding (BR/EDR or LE)
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SecBondByTransport (BD_ADDR bd_addr,
tBT_TRANSPORT transport,
uint8_t pin_len, uint8_t *p_pin,
uint32_t trusted_mask[]);
/*******************************************************************************
**
** Function BTM_SecBondCancel
**
** Description This function is called to cancel ongoing bonding process
** with peer device.
**
** Returns BTM_CMD_STARTED if successfully initiated, otherwise error
**
*******************************************************************************/
extern tBTM_STATUS BTM_SecBondCancel (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_SetEncryption
**
** Description This function is called to ensure that connection is
** encrypted. Should be called only on an open connection.
** Typically only needed for connections that first want to
** bring up unencrypted links, then later encrypt them.
**
** Parameters: bd_addr - Address of the peer device
** transport - Link transport
** p_callback - Pointer to callback function called if
** this function returns PENDING after required
** procedures are completed. Can be set to NULL
** if status is not desired.
** p_ref_data - pointer to any data the caller wishes to receive
** in the callback function upon completion.
** can be set to NULL if not used.
** sec_act - LE security action, unused for BR/EDR
**
** Returns BTM_SUCCESS - already encrypted
** BTM_PENDING - command will be returned in the callback
** BTM_WRONG_MODE- connection not up.
** BTM_BUSY - security procedures are currently active
** BTM_MODE_UNSUPPORTED - if security manager not linked in.
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetEncryption (BD_ADDR bd_addr, tBT_TRANSPORT transport,
tBTM_SEC_CBACK *p_callback,
void *p_ref_data, tBTM_BLE_SEC_ACT sec_act);
/*******************************************************************************
**
** Function BTM_ConfirmReqReply
**
** Description This function is called to confirm the numeric value for
** Simple Pairing in response to BTM_SP_CFM_REQ_EVT
**
** Parameters: res - result of the operation BTM_SUCCESS if success
** bd_addr - Address of the peer device
**
*******************************************************************************/
extern void BTM_ConfirmReqReply(tBTM_STATUS res, BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_PasskeyReqReply
**
** Description This function is called to provide the passkey for
** Simple Pairing in response to BTM_SP_KEY_REQ_EVT
**
** Parameters: res - result of the operation BTM_SUCCESS if success
** bd_addr - Address of the peer device
** passkey - numeric value in the range of 0 - 999999(0xF423F).
**
*******************************************************************************/
extern void BTM_PasskeyReqReply(tBTM_STATUS res, BD_ADDR bd_addr, uint32_t passkey);
/*******************************************************************************
**
** Function BTM_SendKeypressNotif
**
** Description This function is used during the passkey entry model
** by a device with KeyboardOnly IO capabilities
** (very likely to be a HID Device).
** It is called by a HID Device to inform the remote device when
** a key has been entered or erased.
**
** Parameters: bd_addr - Address of the peer device
** type - notification type
**
*******************************************************************************/
extern void BTM_SendKeypressNotif(BD_ADDR bd_addr, tBTM_SP_KEY_TYPE type);
/*******************************************************************************
**
** Function BTM_IoCapRsp
**
** Description This function is called in response to BTM_SP_IO_REQ_EVT
** When the event data io_req.oob_data is set to BTM_OOB_UNKNOWN
** by the tBTM_SP_CALLBACK implementation, this function is
** called to provide the actual response
**
** Parameters: bd_addr - Address of the peer device
** io_cap - The IO capability of local device.
** oob - BTM_OOB_NONE or BTM_OOB_PRESENT.
** auth_req- MITM protection required or not.
**
*******************************************************************************/
extern void BTM_IoCapRsp(BD_ADDR bd_addr, tBTM_IO_CAP io_cap,
tBTM_OOB_DATA oob, tBTM_AUTH_REQ auth_req);
/*******************************************************************************
**
** Function BTM_ReadLocalOobData
**
** Description This function is called to read the local OOB data from
** LM
**
*******************************************************************************/
extern void BTM_ReadLocalOobData(void);
/*******************************************************************************
**
** Function BTM_RemoteOobDataReply
**
** Description This function is called to provide the remote OOB data for
** Simple Pairing in response to BTM_SP_RMT_OOB_EVT
**
** Parameters: bd_addr - Address of the peer device
** c - simple pairing Hash C.
** r - simple pairing Randomizer C.
**
*******************************************************************************/
extern void BTM_RemoteOobDataReply(tBTM_STATUS res, BD_ADDR bd_addr,
BT_OCTET16 c, BT_OCTET16 r);
/*******************************************************************************
**
** Function BTM_BuildOobData
**
** Description This function is called to build the OOB data payload to
** be sent over OOB (non-Bluetooth) link
**
** Parameters: p_data - the location for OOB data
** max_len - p_data size.
** c - simple pairing Hash C.
** r - simple pairing Randomizer C.
** name_len- 0, local device name would not be included.
** otherwise, the local device name is included for
** up to this specified length
**
** Returns Number of bytes in p_data.
**
*******************************************************************************/
extern uint16_t BTM_BuildOobData(uint8_t *p_data, uint16_t max_len, BT_OCTET16 c,
BT_OCTET16 r, uint8_t name_len);
/*******************************************************************************
**
** Function BTM_BothEndsSupportSecureConnections
**
** Description This function is called to check if both the local device and the peer device
** specified by bd_addr support BR/EDR Secure Connections.
**
** Parameters: bd_addr - address of the peer
**
** Returns true if BR/EDR Secure Connections are supported by both local
** and the remote device.
** else false.
**
*******************************************************************************/
extern bool BTM_BothEndsSupportSecureConnections(BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_PeerSupportsSecureConnections
**
** Description This function is called to check if the peer supports
** BR/EDR Secure Connections.
**
** Parameters: bd_addr - address of the peer
**
** Returns true if BR/EDR Secure Connections are supported by the peer,
** else false.
**
*******************************************************************************/
extern bool BTM_PeerSupportsSecureConnections(BD_ADDR bd_addr);
/*******************************************************************************
**
** Function BTM_ReadOobData
**
** Description This function is called to parse the OOB data payload
** received over OOB (non-Bluetooth) link
**
** Parameters: p_data - the location for OOB data
** eir_tag - The associated EIR tag to read the data.
** *p_len(output) - the length of the data with the given tag.
**
** Returns the beginning of the data with the given tag.
** NULL, if the tag is not found.
**
*******************************************************************************/
extern uint8_t * BTM_ReadOobData(uint8_t *p_data, uint8_t eir_tag, uint8_t *p_len);
/*******************************************************************************
**
** Function BTM_SecReadDevName
**
** Description Looks for the device name in the security database for the
** specified BD address.
**
** Returns Pointer to the name or NULL
**
*******************************************************************************/
extern char *BTM_SecReadDevName (BD_ADDR bd_addr);
/*****************************************************************************
** POWER MANAGEMENT FUNCTIONS
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_PmRegister
**
** Description register or deregister with power manager
**
** Returns BTM_SUCCESS if successful,
** BTM_NO_RESOURCES if no room to hold registration
** BTM_ILLEGAL_VALUE
**
*******************************************************************************/
extern tBTM_STATUS BTM_PmRegister (uint8_t mask, uint8_t *p_pm_id,
tBTM_PM_STATUS_CBACK *p_cb);
/*******************************************************************************
**
** Function BTM_SetPowerMode
**
** Description store the mode in control block or
** alter ACL connection behavior.
**
** Returns BTM_SUCCESS if successful,
** BTM_UNKNOWN_ADDR if bd addr is not active or bad
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetPowerMode (uint8_t pm_id, BD_ADDR remote_bda,
tBTM_PM_PWR_MD *p_mode);
/*******************************************************************************
**
** Function BTM_ReadPowerMode
**
** Description This returns the current mode for a specific
** ACL connection.
**
** Input Param remote_bda - device address of desired ACL connection
**
** Output Param p_mode - address where the current mode is copied into.
** BTM_ACL_MODE_NORMAL
** BTM_ACL_MODE_HOLD
** BTM_ACL_MODE_SNIFF
** BTM_ACL_MODE_PARK
** (valid only if return code is BTM_SUCCESS)
**
** Returns BTM_SUCCESS if successful,
** BTM_UNKNOWN_ADDR if bd addr is not active or bad
**
*******************************************************************************/
extern tBTM_STATUS BTM_ReadPowerMode (BD_ADDR remote_bda,
tBTM_PM_MODE *p_mode);
/*******************************************************************************
**
** Function BTM_SetSsrParams
**
** Description This sends the given SSR parameters for the given ACL
** connection if it is in ACTIVE mode.
**
** Input Param remote_bda - device address of desired ACL connection
** max_lat - maximum latency (in 0.625ms)(0-0xFFFE)
** min_rmt_to - minimum remote timeout
** min_loc_to - minimum local timeout
**
**
** Returns BTM_SUCCESS if the HCI command is issued successful,
** BTM_UNKNOWN_ADDR if bd addr is not active or bad
** BTM_CMD_STORED if the command is stored
**
*******************************************************************************/
extern tBTM_STATUS BTM_SetSsrParams (BD_ADDR remote_bda, uint16_t max_lat,
uint16_t min_rmt_to, uint16_t min_loc_to);
/*******************************************************************************
**
** Function BTM_GetHCIConnHandle
**
** Description This function is called to get the handle for an ACL connection
** to a specific remote BD Address.
**
** Returns the handle of the connection, or 0xFFFF if none.
**
*******************************************************************************/
extern uint16_t BTM_GetHCIConnHandle (const BD_ADDR remote_bda, tBT_TRANSPORT transport);
/*******************************************************************************
**
** Function BTM_DeleteStoredLinkKey
**
** Description This function is called to delete link key for the specified
** device addresses from the NVRAM storage attached to the Bluetooth
** controller.
**
** Parameters: bd_addr - Addresses of the devices
** p_cb - Call back function to be called to return
** the results
**
*******************************************************************************/
extern tBTM_STATUS BTM_DeleteStoredLinkKey(BD_ADDR bd_addr, tBTM_CMPL_CB *p_cb);
/*******************************************************************************
**
** Function BTM_WriteEIR
**
** Description This function is called to write EIR data to controller.
**
** Parameters p_buff - allocated HCI command buffer including extended
** inquriry response
**
** Returns BTM_SUCCESS - if successful
** BTM_MODE_UNSUPPORTED - if local device cannot support it
**
*******************************************************************************/
extern tBTM_STATUS BTM_WriteEIR( BT_HDR * p_buff );
/*******************************************************************************
**
** Function BTM_CheckEirData
**
** Description This function is called to get EIR data from significant part.
**
** Parameters p_eir - pointer of EIR significant part
** type - finding EIR data type
** p_length - return the length of EIR data
**
** Returns pointer of EIR data
**
*******************************************************************************/
extern uint8_t *BTM_CheckEirData( uint8_t *p_eir, uint8_t type, uint8_t *p_length );
/*******************************************************************************
**
** Function BTM_HasEirService
**
** Description This function is called to know if UUID in bit map of UUID.
**
** Parameters p_eir_uuid - bit map of UUID list
** uuid16 - UUID 16-bit
**
** Returns true - if found
** false - if not found
**
*******************************************************************************/
extern bool BTM_HasEirService( uint32_t *p_eir_uuid, uint16_t uuid16 );
/*******************************************************************************
**
** Function BTM_HasInquiryEirService
**
** Description This function is called to know if UUID in bit map of UUID list.
**
** Parameters p_results - inquiry results
** uuid16 - UUID 16-bit
**
** Returns BTM_EIR_FOUND - if found
** BTM_EIR_NOT_FOUND - if not found and it is complete list
** BTM_EIR_UNKNOWN - if not found and it is not complete list
**
*******************************************************************************/
extern tBTM_EIR_SEARCH_RESULT BTM_HasInquiryEirService( tBTM_INQ_RESULTS *p_results,
uint16_t uuid16 );
/*******************************************************************************
**
** Function BTM_AddEirService
**
** Description This function is called to add a service in bit map of UUID list.
**
** Parameters p_eir_uuid - bit mask of UUID list for EIR
** uuid16 - UUID 16-bit
**
** Returns None
**
*******************************************************************************/
extern void BTM_AddEirService( uint32_t *p_eir_uuid, uint16_t uuid16 );
/*******************************************************************************
**
** Function BTM_RemoveEirService
**
** Description This function is called to remove a service in bit map of UUID list.
**
** Parameters p_eir_uuid - bit mask of UUID list for EIR
** uuid16 - UUID 16-bit
**
** Returns None
**
*******************************************************************************/
extern void BTM_RemoveEirService( uint32_t *p_eir_uuid, uint16_t uuid16 );
/*******************************************************************************
**
** Function BTM_GetEirSupportedServices
**
** Description This function is called to get UUID list from bit map of UUID list.
**
** Parameters p_eir_uuid - bit mask of UUID list for EIR
** p - reference of current pointer of EIR
** max_num_uuid16 - max number of UUID can be written in EIR
** num_uuid16 - number of UUID have been written in EIR
**
** Returns BTM_EIR_MORE_16BITS_UUID_TYPE, if it has more than max
** BTM_EIR_COMPLETE_16BITS_UUID_TYPE, otherwise
**
*******************************************************************************/
extern uint8_t BTM_GetEirSupportedServices( uint32_t *p_eir_uuid, uint8_t **p,
uint8_t max_num_uuid16, uint8_t *p_num_uuid16);
/*******************************************************************************
**
** Function BTM_GetEirUuidList
**
** Description This function parses EIR and returns UUID list.
**
** Parameters p_eir - EIR
** uuid_size - LEN_UUID_16, LEN_UUID_32, LEN_UUID_128
** p_num_uuid - return number of UUID in found list
** p_uuid_list - return UUID 16-bit list
** max_num_uuid - maximum number of UUID to be returned
**
** Returns 0 - if not found
** BTM_EIR_COMPLETE_16BITS_UUID_TYPE
** BTM_EIR_MORE_16BITS_UUID_TYPE
** BTM_EIR_COMPLETE_32BITS_UUID_TYPE
** BTM_EIR_MORE_32BITS_UUID_TYPE
** BTM_EIR_COMPLETE_128BITS_UUID_TYPE
** BTM_EIR_MORE_128BITS_UUID_TYPE
**
*******************************************************************************/
extern uint8_t BTM_GetEirUuidList( uint8_t *p_eir, uint8_t uuid_size, uint8_t *p_num_uuid,
uint8_t *p_uuid_list, uint8_t max_num_uuid);
/*****************************************************************************
** SCO OVER HCI
*****************************************************************************/
/*******************************************************************************
**
** Function BTM_ConfigScoPath
**
** Description This function enable/disable SCO over HCI and registers SCO
** data callback if SCO over HCI is enabled.
**
** Parameter path: SCO or HCI
** p_sco_data_cb: callback function or SCO data if path is set
** to transport.
** p_pcm_param: pointer to the PCM interface parameter. If a NULL
** pointer is used, PCM parameter maintained in
** the control block will be used; otherwise update
** control block value.
** err_data_rpt: Lisbon feature to enable the erronous data report
** or not.
**
** Returns BTM_SUCCESS if the successful.
** BTM_NO_RESOURCES: no rsource to start the command.
** BTM_ILLEGAL_VALUE: invalid callback function pointer.
** BTM_CMD_STARTED :Command sent. Waiting for command cmpl event.
**
**
*******************************************************************************/
extern tBTM_STATUS BTM_ConfigScoPath (tBTM_SCO_ROUTE_TYPE path,
tBTM_SCO_DATA_CB *p_sco_data_cb,
tBTM_SCO_PCM_PARAM *p_pcm_param,
bool err_data_rpt);
/*******************************************************************************
**
** Function BTM_WriteScoData
**
** Description This function write SCO data to a specified instance. The data
** to be written p_buf needs to carry an offset of
** HCI_SCO_PREAMBLE_SIZE bytes, and the data length can not
** exceed BTM_SCO_DATA_SIZE_MAX bytes, whose default value is set
** to 60 and is configurable. Data longer than the maximum bytes
** will be truncated.
**
** Returns BTM_SUCCESS: data write is successful
** BTM_ILLEGAL_VALUE: SCO data contains illegal offset value.
** BTM_SCO_BAD_LENGTH: SCO data length exceeds the max SCO packet
** size.
** BTM_NO_RESOURCES: no resources.
** BTM_UNKNOWN_ADDR: unknown SCO connection handle, or SCO is not
** routed via HCI.
**
**
*******************************************************************************/
extern tBTM_STATUS BTM_WriteScoData (uint16_t sco_inx, BT_HDR *p_buf);
/*******************************************************************************
**
** Function BTM_SetARCMode
**
** Description Send Audio Routing Control command.
**
** Returns void
**
*******************************************************************************/
extern void BTM_SetARCMode (uint8_t iface, uint8_t arc_mode, tBTM_VSC_CMPL_CB *p_arc_cb);
/*******************************************************************************
**
** Function BTM_PCM2Setup_Write
**
** Description Send PCM2_Setup write command.
**
** Returns void
**
*******************************************************************************/
extern void BTM_PCM2Setup_Write (bool clk_master, tBTM_VSC_CMPL_CB *p_arc_cb);
/*******************************************************************************
**
** Function BTM_PM_ReadControllerState
**
** Description This function is called to obtain the controller state
**
** Returns Controller state (BTM_CONTRL_ACTIVE, BTM_CONTRL_SCAN, and BTM_CONTRL_IDLE)
**
*******************************************************************************/
extern tBTM_CONTRL_STATE BTM_PM_ReadControllerState(void);
#ifdef __cplusplus
}
#endif
#endif /* BTM_API_H */