15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1999-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This file contains functions for BLE whitelist operation. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_int.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTM_BLE_SCAN_PARAM_TOUT 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_BLE_SCAN_PARAM_TOUT 50 /* 50 seconds */ 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_suspend_wl_activity(tBTM_BLE_WL_STATE wl_state); 41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_resume_wl_activity(tBTM_BLE_WL_STATE wl_state); 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_update_scanner_filter_policy 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function update the filter policy of scnner or advertiser. 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_update_scanner_filter_policy(tBTM_BLE_SFP scan_policy) 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_inq = &btm_cb.ble_ctr_cb.inq_var; 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_update_scanner_filter_policy"); 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_inq->sfp = scan_policy; 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_inq->scan_type = (p_inq->scan_type == BTM_BLE_SCAN_MODE_NONE) ? BTM_BLE_SCAN_MODE_ACTI: p_inq->scan_type; 56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_set_scan_params (p_inq->scan_type, 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(!p_inq->scan_interval ? BTM_BLE_GAP_DISC_SCAN_INT : p_inq->scan_interval), 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(!p_inq->scan_window ? BTM_BLE_GAP_DISC_SCAN_WIN : p_inq->scan_window), 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BLE_ADDR_PUBLIC, 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_policy); 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 656975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function btm_add_dev_to_controller 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 676975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description This function load the device into controller white list 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 696975b4d711142b885af479721cada448952c6b41Andre EisenbachBOOLEAN btm_add_dev_to_controller (BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr) 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (bd_addr); 726975b4d711142b885af479721cada448952c6b41Andre Eisenbach tBLE_ADDR_TYPE addr_type = BLE_ADDR_PUBLIC; 73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN started = FALSE; 746975b4d711142b885af479721cada448952c6b41Andre Eisenbach BD_ADDR dummy_bda = {0}; 75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_DEVICE_TYPE dev_type; 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_dev_rec != NULL && 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev_rec->device_type == BT_DEVICE_TYPE_BLE) 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (to_add) 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 836975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (p_dev_rec->ble.ble_addr_type == BLE_ADDR_PUBLIC || !BTM_BLE_IS_RESOLVE_BDA(bd_addr)) 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta started = btsnd_hcic_ble_add_white_list (p_dev_rec->ble.ble_addr_type, bd_addr); 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (memcmp(p_dev_rec->ble.static_addr, bd_addr, BD_ADDR_LEN) != 0 && 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcmp(p_dev_rec->ble.static_addr, dummy_bda, BD_ADDR_LEN) != 0) 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta started = btsnd_hcic_ble_add_white_list (p_dev_rec->ble.static_addr_type, p_dev_rec->ble.static_addr); 91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!BTM_BLE_IS_RESOLVE_BDA(bd_addr)) 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta started = btsnd_hcic_ble_remove_from_white_list (p_dev_rec->ble.ble_addr_type, bd_addr); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 996975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (memcmp(p_dev_rec->ble.static_addr, dummy_bda, BD_ADDR_LEN) != 0 && 1006975b4d711142b885af479721cada448952c6b41Andre Eisenbach memcmp(p_dev_rec->ble.static_addr, bd_addr, BD_ADDR_LEN) != 0) 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta started = btsnd_hcic_ble_remove_from_white_list (p_dev_rec->ble.static_addr_type, p_dev_rec->ble.static_addr); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } /* if not a known device, shall we add it? */ 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_ReadDevInfo(bd_addr, &dev_type, &addr_type); 1096975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (to_add) 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project started = btsnd_hcic_ble_add_white_list (addr_type, bd_addr); 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project started = btsnd_hcic_ble_remove_from_white_list (addr_type, bd_addr); 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1166975b4d711142b885af479721cada448952c6b41Andre Eisenbach return started; 1176975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1186975b4d711142b885af479721cada448952c6b41Andre Eisenbach} 1196975b4d711142b885af479721cada448952c6b41Andre Eisenbach/******************************************************************************* 1206975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1216975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function btm_execute_wl_dev_operation 1226975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1236975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description execute the pending whitelist device operation(loading or removing) 1246975b4d711142b885af479721cada448952c6b41Andre Eisenbach*******************************************************************************/ 1256975b4d711142b885af479721cada448952c6b41Andre EisenbachBOOLEAN btm_execute_wl_dev_operation(void) 1266975b4d711142b885af479721cada448952c6b41Andre Eisenbach{ 1276975b4d711142b885af479721cada448952c6b41Andre Eisenbach tBTM_BLE_WL_OP *p_dev_op = btm_cb.ble_ctr_cb.wl_op_q; 1286975b4d711142b885af479721cada448952c6b41Andre Eisenbach UINT8 i = 0; 1296975b4d711142b885af479721cada448952c6b41Andre Eisenbach BOOLEAN rt = TRUE; 1306975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1316975b4d711142b885af479721cada448952c6b41Andre Eisenbach for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM && rt; i ++, p_dev_op ++) 1326975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1336975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (p_dev_op->in_use) 1346975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1356975b4d711142b885af479721cada448952c6b41Andre Eisenbach rt = btm_add_dev_to_controller(p_dev_op->to_add, p_dev_op->bd_addr, p_dev_op->attr); 1366975b4d711142b885af479721cada448952c6b41Andre Eisenbach memset(p_dev_op, 0, sizeof(tBTM_BLE_WL_OP)); 1376975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1386975b4d711142b885af479721cada448952c6b41Andre Eisenbach else 1396975b4d711142b885af479721cada448952c6b41Andre Eisenbach break; 1406975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1416975b4d711142b885af479721cada448952c6b41Andre Eisenbach return rt; 1426975b4d711142b885af479721cada448952c6b41Andre Eisenbach} 1436975b4d711142b885af479721cada448952c6b41Andre Eisenbach/******************************************************************************* 1446975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1456975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function btm_enq_wl_dev_operation 1466975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1476975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description enqueue the pending whitelist device operation(loading or removing). 1486975b4d711142b885af479721cada448952c6b41Andre Eisenbach*******************************************************************************/ 1496975b4d711142b885af479721cada448952c6b41Andre Eisenbachvoid btm_enq_wl_dev_operation(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr) 1506975b4d711142b885af479721cada448952c6b41Andre Eisenbach{ 1516975b4d711142b885af479721cada448952c6b41Andre Eisenbach tBTM_BLE_WL_OP *p_dev_op = btm_cb.ble_ctr_cb.wl_op_q; 1526975b4d711142b885af479721cada448952c6b41Andre Eisenbach UINT8 i = 0; 1536975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1546975b4d711142b885af479721cada448952c6b41Andre Eisenbach for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM; i ++, p_dev_op ++) 1556975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1566975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (p_dev_op->in_use && !memcmp(p_dev_op->bd_addr, bd_addr, BD_ADDR_LEN)) 1576975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1586975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_dev_op->to_add = to_add; 1596975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_dev_op->attr = attr; 1606975b4d711142b885af479721cada448952c6b41Andre Eisenbach return; 1616975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1626975b4d711142b885af479721cada448952c6b41Andre Eisenbach else if (!p_dev_op->in_use) 1636975b4d711142b885af479721cada448952c6b41Andre Eisenbach break; 1646975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1656975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (i != BTM_BLE_MAX_BG_CONN_DEV_NUM) 1666975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1676975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_dev_op->in_use = TRUE; 1686975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_dev_op->to_add = to_add; 1696975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_dev_op->attr = attr; 1706975b4d711142b885af479721cada448952c6b41Andre Eisenbach memcpy(p_dev_op->bd_addr, bd_addr, BD_ADDR_LEN); 1716975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1726975b4d711142b885af479721cada448952c6b41Andre Eisenbach else 1736975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1746975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTM_TRACE_ERROR0("max pending WL operation reached, discard"); 1756975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1766975b4d711142b885af479721cada448952c6b41Andre Eisenbach return; 1776975b4d711142b885af479721cada448952c6b41Andre Eisenbach} 1786975b4d711142b885af479721cada448952c6b41Andre Eisenbach/******************************************************************************* 1796975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1806975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function btm_update_dev_to_white_list 1816975b4d711142b885af479721cada448952c6b41Andre Eisenbach** 1826975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description This function adds a device into white list. 1836975b4d711142b885af479721cada448952c6b41Andre Eisenbach*******************************************************************************/ 1846975b4d711142b885af479721cada448952c6b41Andre EisenbachBOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr) 1856975b4d711142b885af479721cada448952c6b41Andre Eisenbach{ 1866975b4d711142b885af479721cada448952c6b41Andre Eisenbach /* look up the sec device record, and find the address */ 1876975b4d711142b885af479721cada448952c6b41Andre Eisenbach tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 1886975b4d711142b885af479721cada448952c6b41Andre Eisenbach BOOLEAN started = FALSE; 1896975b4d711142b885af479721cada448952c6b41Andre Eisenbach UINT8 wl_state = p_cb->wl_state; 1906975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1916975b4d711142b885af479721cada448952c6b41Andre Eisenbach if ((to_add && p_cb->num_empty_filter == 0) || 1926975b4d711142b885af479721cada448952c6b41Andre Eisenbach (!to_add && p_cb->num_empty_filter == p_cb->max_filter_entries)) 1936975b4d711142b885af479721cada448952c6b41Andre Eisenbach { 1946975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTM_TRACE_ERROR1("WL full or empty, unable to update to WL. num_entry available: %d", 1956975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_cb->num_empty_filter); 1966975b4d711142b885af479721cada448952c6b41Andre Eisenbach return started; 1976975b4d711142b885af479721cada448952c6b41Andre Eisenbach } 1986975b4d711142b885af479721cada448952c6b41Andre Eisenbach 1996975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_suspend_wl_activity(wl_state); 2006975b4d711142b885af479721cada448952c6b41Andre Eisenbach 2016975b4d711142b885af479721cada448952c6b41Andre Eisenbach /* enq pending WL device operation */ 2026975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_enq_wl_dev_operation(to_add, bd_addr, attr); 2036975b4d711142b885af479721cada448952c6b41Andre Eisenbach 204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_resume_wl_activity(wl_state); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return started; 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_clear_white_list 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function clears the white list. 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_clear_white_list (void) 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_clear_white_list"); 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_ble_clear_white_list(); 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_clear_white_list_complete 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function clears the white list complete. 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_clear_white_list_complete(UINT8 *p_data, UINT16 evt_len) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status; 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_clear_white_list_complete"); 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (status, p_data); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == HCI_SUCCESS) 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->num_empty_filter = p_cb->max_filter_entries; 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_add_2_white_list_complete 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function read the current white list size. 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_add_2_white_list_complete(UINT8 status) 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_add_2_white_list_complete"); 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (status == HCI_SUCCESS) 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->num_empty_filter --; 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_add_2_white_list_complete 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function read the current white list size. 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_remove_from_white_list_complete(UINT8 *p, UINT16 evt_len) 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_remove_from_white_list_complete"); 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (*p == HCI_SUCCESS) 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->num_empty_filter ++; 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_count_unconn_dev_in_whitelist 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function find the number of un-connected background device 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 btm_ble_count_unconn_dev_in_whitelist(void) 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 i, count = 0; 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM; i ++) 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->bg_dev_list[i].in_use && 282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta !BTM_IsAclConnectionUp(p_cb->bg_dev_list[i].bd_addr)) 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project count ++; 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return count; 288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_update_bg_conn_list 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function update the local background connection device list. 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btm_update_bg_conn_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 *p_attr_tag) 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_LE_BG_CONN_DEV *p_bg_dev = &p_cb->bg_dev_list[0], *p_next, *p_cur; 300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 i, j; 301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN ret = FALSE; 302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_update_bg_conn_list"); 304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((to_add && (p_cb->bg_dev_num == BTM_BLE_MAX_BG_CONN_DEV_NUM || p_cb->num_empty_filter == 0))) 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("num_empty_filter = %d", p_cb->num_empty_filter); 308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM; i ++, p_bg_dev ++) 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_bg_dev->in_use && memcmp(p_bg_dev->bd_addr, bd_addr, BD_ADDR_LEN) == 0) 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3156975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (!to_add) 316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(p_bg_dev, 0, sizeof(tBTM_LE_BG_CONN_DEV)); 318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->bg_dev_num --; 319ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cur = p_bg_dev; 320ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_next = p_bg_dev + 1; 321ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (j = i + 1 ;j < BTM_BLE_MAX_BG_CONN_DEV_NUM && p_next->in_use ; j ++, p_cur ++, p_next ++ ) 322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(p_cur, p_next, sizeof(tBTM_LE_BG_CONN_DEV)); 323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 324ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = TRUE; 325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (!p_bg_dev->in_use && to_add) 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG0("add new WL entry in bg_dev_list"); 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(p_bg_dev->bd_addr, bd_addr, BD_ADDR_LEN); 332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_bg_dev->in_use = TRUE; 333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->bg_dev_num ++; 334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = TRUE; 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret; 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_start_auto_conn 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to start/stop auto connection procedure. 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters start: TRUE to start; FALSE to stop. 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_ble_start_auto_conn(BOOLEAN start) 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR dummy_bda = {0}; 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN exec = TRUE; 360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 own_addr_type = BLE_ADDR_PUBLIC; 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 scan_int, scan_win; 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (start) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->conn_state == BLE_CONN_IDLE && btm_ble_count_unconn_dev_in_whitelist() > 0) 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3676975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_execute_wl_dev_operation(); 368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta scan_int = (p_cb->scan_int == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_SLOW_INT_1 : p_cb->scan_int; 370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta scan_win = (p_cb->scan_win == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_SLOW_WIN_1 : p_cb->scan_win; 371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!btsnd_hcic_ble_create_ll_conn (scan_int, /* UINT16 scan_int */ 373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta scan_win, /* UINT16 scan_win */ 374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 0x01, /* UINT8 white_list */ 375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BLE_ADDR_PUBLIC, /* UINT8 addr_type_peer */ 376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta dummy_bda, /* BD_ADDR bda_peer */ 377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type, /* UINT8 addr_type_own, not allow random address for central */ 378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_BLE_CONN_INT_MIN_DEF, /* UINT16 conn_int_min */ 379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_BLE_CONN_INT_MAX_DEF, /* UINT16 conn_int_max */ 380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_BLE_CONN_SLAVE_LATENCY_DEF, /* UINT16 conn_latency */ 381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_BLE_CONN_TIMEOUT_DEF, /* UINT16 conn_timeout */ 382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 0, /* UINT16 min_len */ 383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 0)) /* UINT16 max_len */ 384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* start auto connection failed */ 386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta exec = FALSE; 387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3906975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_ble_set_conn_st (BLE_BG_CONN); 391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project exec = FALSE; 397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->conn_state == BLE_BG_CONN) 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_create_conn_cancel(); 4046975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_ble_set_conn_st (BLE_CONN_CANCEL); 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if 0 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_ERROR1("conn_st = %d, not in auto conn state, can not stop.", p_cb->conn_state); 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta exec = FALSE; 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return exec; 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_start_select_conn 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to start/stop selective connection procedure. 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters start: TRUE to start; FALSE to stop. 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_select_cback: callback function to return application 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** selection. 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN: selective connectino procedure is started. 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_ble_start_select_conn(BOOLEAN start,tBTM_BLE_SEL_CBACK *p_select_cback) 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 scan_int, scan_win; 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_start_select_conn"); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta scan_int = (p_cb->scan_int == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_FAST_INT : p_cb->scan_int; 439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta scan_win = (p_cb->scan_win == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_FAST_WIN : p_cb->scan_win; 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (start) 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btm_cb.btm_inq_vars.inq_active == BTM_INQUIRY_INACTIVE) 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_select_cback != NULL) 446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.p_select_cback = p_select_cback; 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_update_scanner_filter_policy(SP_ADV_WL); 449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.inq_var.scan_type = BTM_BLE_SCAN_MODE_PASS; 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_set_scan_params(BTM_BLE_SCAN_MODE_PASS, /* use passive scan by default */ 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_int, /* scan interval */ 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_win, /* scan window */ 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BLE_ADDR_PUBLIC, /* own device, DUMO always use public */ 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SP_ADV_WL) /* process advertising packets only from devices in the White List */ 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ) 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->inq_var.adv_mode == BTM_BLE_ADV_ENABLE 460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ) 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("peripheral device cannot initiate a selective connection"); 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (p_cb->bg_dev_num > 0 && btm_ble_count_unconn_dev_in_whitelist() > 0 ) 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_set_scan_enable(TRUE, TRUE)) /* duplicate filtering enabled */ 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mark up inquiry status flag */ 472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.btm_inq_vars.inq_active |= BTM_LE_SELECT_CONN_ACTIVE; 473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->inq_var.proc_mode = BTM_BLE_SELECT_SCAN; 474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_state = BLE_BG_CONN; 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("scan active, can not start selective connection procedure"); 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* disable selective connection mode */ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.btm_inq_vars.inq_active &= ~BTM_LE_SELECT_CONN_ACTIVE; 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.inq_var.proc_mode = BTM_BLE_INQUIRY_NONE; 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_update_scanner_filter_policy(SP_ADV_ALL); 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stop scanning */ 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_set_scan_enable(FALSE, TRUE)) /* duplicate filtering enabled */ 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4926975b4d711142b885af479721cada448952c6b41Andre Eisenbach btm_update_scanner_filter_policy(SP_ADV_ALL); 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_initiate_select_conn 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to start/stop selective connection procedure. 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters start: TRUE to start; FALSE to stop. 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_select_cback: callback function to return application 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** selection. 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN: selective connectino procedure is started. 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_initiate_select_conn(BD_ADDR bda) 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_initiate_select_conn"); 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* use direct connection procedure to initiate connection */ 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!L2CA_ConnectFixedChnl(L2CAP_ATT_CID, bda)) 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("btm_ble_initiate_select_conn failed"); 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_suspend_bg_conn 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to suspend an active background connection 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** procedure. 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters none. 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns none. 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_suspend_bg_conn(void) 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_EVENT0 ("btm_ble_suspend_bg_conn"); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->bg_conn_type == BTM_BLE_CONN_AUTO) 537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_start_auto_conn(FALSE); 539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (p_cb->bg_conn_type == BTM_BLE_CONN_SELECTIVE) 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_start_select_conn(FALSE, NULL); 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_suspend_wl_activity 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function is to suspend white list related activity 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns none. 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_suspend_wl_activity(tBTM_BLE_WL_STATE wl_state) 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (wl_state & BTM_BLE_WL_INIT) 557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_start_auto_conn(FALSE); 559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (wl_state & BTM_BLE_WL_SCAN) 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_start_select_conn(FALSE, NULL); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (wl_state & BTM_BLE_WL_ADV) 565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_set_adv_enable(BTM_BLE_ADV_DISABLE); 567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_resume_wl_activity 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function is to resume white list related activity 575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns none. 577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_resume_wl_activity(tBTM_BLE_WL_STATE wl_state) 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_resume_bg_conn(); 582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (wl_state & BTM_BLE_WL_ADV) 584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_set_adv_enable(BTM_BLE_ADV_ENABLE); 586ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 587ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_resume_bg_conn 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to resume a background auto connection 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** procedure. 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters none. 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns none. 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btm_ble_resume_bg_conn(void) 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN ret = FALSE; 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->bg_conn_type != BTM_BLE_CONN_NONE) 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->bg_conn_type == BTM_BLE_CONN_AUTO) 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btm_ble_start_auto_conn(TRUE); 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->bg_conn_type == BTM_BLE_CONN_SELECTIVE) 612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = btm_ble_start_select_conn(TRUE, btm_cb.ble_ctr_cb.p_select_cback); 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret; 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_get_conn_st 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function get BLE connection state 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns connection state 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattatBTM_BLE_CONN_ST btm_ble_get_conn_st(void) 627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btm_cb.ble_ctr_cb.conn_state; 629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_set_conn_st 633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function set BLE connection state 635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 636ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns None. 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_set_conn_st(tBTM_BLE_CONN_ST new_st) 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.conn_state = new_st; 642ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 644ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_enqueue_direct_conn_req 647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function enqueue the direct connection request 649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns None. 651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_enqueue_direct_conn_req(void *p_param) 654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_CONN_REQ *p = (tBTM_BLE_CONN_REQ *)GKI_getbuf(sizeof(tBTM_BLE_CONN_REQ)); 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p->p_param = p_param; 658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_enqueue (&btm_cb.ble_ctr_cb.conn_pending_q, p); 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 661ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 662ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 663ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_send_pending_direct_conn 664ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 665ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function send the pending direct connection request in queue 666ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 667ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns TRUE if started, FALSE otherwise 668ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 669ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 670ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btm_send_pending_direct_conn(void ) 671ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 672ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_CONN_REQ *p_req; 673ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN rt = FALSE; 674ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 675ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ( btm_cb.ble_ctr_cb.conn_pending_q.count ) 676ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 677ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_req = (tBTM_BLE_CONN_REQ*)GKI_dequeue (&btm_cb.ble_ctr_cb.conn_pending_q); 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rt = l2cble_init_direct_conn((tL2C_LCB *)(p_req->p_param)); 680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_freebuf((void *)p_req); 682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return rt; 685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 688ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 689