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