/****************************************************************************** * * 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 "device/include/esco_parameters.h" #include "hcidefs.h" #include "sdp_api.h" #include "smp_api.h" #include "btm_api_types.h" /***************************************************************************** * 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; * otherwise 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 Return 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 are * 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 resources could not be allocated 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 resources could not be allocated to * start the command * BTM_WRONG_MODE if there is no 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 Read all the 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 memory couldn't be allocated to issue * the command * BTM_UNKNOWN_ADDR if no active link with bd addr specified * BTM_MODE_UNSUPPORTED if the 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 memory couldn't be allocated to issue * the 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 memory couldn't be allocated to issue * the 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 memory couldn't be allocated to issue * the 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 Reead 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(enh_esco_params_t* 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, enh_esco_params_t* 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 and 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. * * 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 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_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 Return if a UUID is in the bit map of a 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 a 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 the bit map 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 from the bit map * 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 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 * eirl_len - EIR len * 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, size_t eir_len, 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, the PCM parameter * maintained in the control block will be used; * otherwise update the 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 * complete event. * * ******************************************************************************/ extern tBTM_STATUS BTM_ConfigScoPath(esco_data_path_t 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); #endif /* BTM_API_H */