15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2008-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 GAP. 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#include <stdio.h> 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (GAP_INCLUDED == TRUE) 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gap_api.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gattdefs.h" 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_BLE_NAME_SHORT 0x01 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_BLE_NAME_CMPL 0x02 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_BLE_FILTER_TARGET_UNKNOWN 0xff 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_BLE_POLICY_UNKNOWN 0xff 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_EXT_BLE_RMT_NAME_TIMEOUT 30 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local functions 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_ble_update_adv_flag(UINT8 flag); 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt_type, UINT8 *p); 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst, tBTM_BLE_ADV_DATA *p_data); 53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic UINT8 btm_set_conn_mode_adv_init_addr(tBTM_BLE_INQ_CB *p_cb, 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR_PTR p_addr_ptr, 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE *p_init_addr_type, 56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE *p_own_addr_type); 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btm_ble_start_adv(void); 58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic tBTM_STATUS btm_ble_stop_adv(void); 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleReset 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to reset ULP controller. 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters None. 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_BleReset(void) 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_ble_reset(); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function BTM_BleUpdateAdvWhitelist 80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Add or remove device from advertising white list 82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN BTM_BleUpdateAdvWhitelist(BOOLEAN add_remove, BD_ADDR remote_bda) 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return FALSE; 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function BTM_BleUpdateAdvFilterPolicy 94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function update the filter policy of advertiser. 96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameter adv_policy: advertising filter policy 98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 99ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Return void 100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy) 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE init_addr_type = BLE_ADDR_PUBLIC; 105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR p_addr_ptr= {0}; 106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 adv_mode = p_cb->adv_mode; 107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_EVENT0 ("BTM_BleUpdateAdvFilterPolicy"); 109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1103aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 1113aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return; 1123aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->afp != adv_policy) 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->afp = adv_policy; 116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if adv active, stop and restart */ 118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_stop_adv (); 119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->connectable_mode & BTM_BLE_CONNECTABLE) 121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->evt_type = btm_set_conn_mode_adv_init_addr(p_cb, p_addr_ptr, &init_addr_type, &p_cb->adv_addr_type); 122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_write_adv_params (p_cb->adv_interval_min, 124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_interval_max, 125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->evt_type, 126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_addr_type, 127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta init_addr_type, 128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_addr_ptr, 129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_chnl_map, 130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->afp); 131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (adv_mode == BTM_BLE_ADV_ENABLE) 133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_start_adv (); 134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleObserve 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This procedure keep the device listening for advertising 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** events from a broadcast device. 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters start: start or stop observe. 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** white_list: use white list in observer mode or not. 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_BleObserve(BOOLEAN start, UINT8 duration, 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_RESULTS_CB *p_results_cb, tBTM_CMPL_CB *p_cmpl_cb) 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_inq = &btm_cb.ble_ctr_cb.inq_var; 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_NO_RESOURCES; 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("BTM_BleObserve "); 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1583aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 1593aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 1603aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (start) 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* shared inquiry database, do not allow observe if any inquiry is active */ 164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btm_cb.btm_inq_vars.inq_active || p_inq->proc_mode != BTM_BLE_INQUIRY_NONE) 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_BUSY; 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.p_inq_results_cb = p_results_cb; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.p_inq_cmpl_cb = p_cmpl_cb; 169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_inq->scan_type = (p_inq->scan_type == BTM_BLE_SCAN_MODE_NONE) ? BTM_BLE_SCAN_MODE_ACTI: p_inq->scan_type; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allow config scanning type */ 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btsnd_hcic_ble_set_scan_params (p_inq->scan_type, 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(!p_inq->scan_interval ? BTM_BLE_GAP_DISC_SCAN_INT : p_inq->scan_interval), 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(!p_inq->scan_window ? BTM_BLE_GAP_DISC_SCAN_WIN : p_inq->scan_window), 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BLE_ADDR_PUBLIC, 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BLE_DEFAULT_SFP)) /* assume observe always not using white list */ 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start scan, disable duplicate filtering */ 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_ENABLE, BTM_BLE_DUPLICATE_DISABLE)) 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->proc_mode = BTM_BLE_OBSERVE; 183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.btm_inq_vars.inq_active |= BTM_LE_OBSERVE_ACTIVE; 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (duration != 0) 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start inquiry timer */ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer (&p_inq->inq_timer_ent, BTU_TTYPE_BLE_INQUIRY, duration); 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_inq->proc_mode == BTM_BLE_OBSERVE) 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.btm_inq_vars.inq_active &= ~BTM_LE_OBSERVE_ACTIVE; 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_stop_scan(); 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleBroadcast 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is to start or stop broadcasting. 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters start: start or stop broadcasting. 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns status. 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_BleBroadcast(BOOLEAN start) 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_NO_RESOURCES; 216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt_type = p_cb->scan_rsp ? BTM_BLE_DISCOVER_EVT: BTM_BLE_NON_CONNECT_EVT; 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2203aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 2213aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 2223aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTM_BLE_PC_ADV_TEST_MODE 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_BLE_PC_ADV_TEST_MODE) 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_type = p_cb->scan_rsp ? BTM_BLE_CONNECT_EVT: BTM_BLE_NON_CONNECT_EVT; 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (start && p_cb->adv_mode == BTM_BLE_ADV_DISABLE) 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update adv params */ 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_write_adv_params ((UINT16)(p_cb->adv_interval_min ? p_cb->adv_interval_min : BTM_BLE_GAP_ADV_INT), 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(p_cb->adv_interval_max ? p_cb->adv_interval_max : BTM_BLE_GAP_ADV_INT), 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_type, 236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_addr_cb->own_addr_type, 237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->direct_bda.type, 238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->direct_bda.bda, 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_chnl_map, 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->afp)) 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NO_RESOURCES; 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->evt_type = evt_type; 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = btm_ble_start_adv (); 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (!start && p_cb->adv_mode == BTM_BLE_ADV_ENABLE) 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = btm_ble_stop_adv(); 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_WRONG_MODE; 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR2("Can not %s Broadcast, device %s in Broadcast mode", 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (start ? "Start" : "Stop"), (start ? "alerady" :"not")); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_RegisterScanReqEvt 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to register a scan request callback 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** on the advertiser. 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_scan_req_cback: scan request callback. If NULL, remove the 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** registration. 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_RegisterScanReqEvt(tBTM_BLE_SCAN_REQ_CBACK *p_scan_req_cback) 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#ifdef BTM_BLE_PC_ADV_TEST_MODE /* For general stack code (e.g. BTInsight testing), we simply do not define it to exclude or set it to TRUE to include */ 277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (BTM_BLE_PC_ADV_TEST_MODE) /* For stack component, it is always defined and maps to a global variable g_bDraculaAdvertisingMode */ 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_scan_req_cback = p_scan_req_cback; 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleSetBgConnType 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set BLE connectable mode for a 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peripheral device. 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters bg_conn_type: it can be auto connection, or selective connection. 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_select_cback: callback function when selective connection procedure 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is being used. 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN BTM_BleSetBgConnType(tBTM_BLE_CONN_TYPE bg_conn_type, 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_SEL_CBACK *p_select_cback) 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN started = TRUE; 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("BTM_BleSetBgConnType "); 3053aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 3063aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return FALSE; 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.bg_conn_type != bg_conn_type) 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (bg_conn_type) 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_CONN_AUTO: 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_start_auto_conn(TRUE); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_CONN_SELECTIVE: 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_AUTO) 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_start_auto_conn(FALSE); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project started = btm_ble_start_select_conn(TRUE, p_select_cback); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_CONN_NONE: 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_AUTO) 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_start_auto_conn(FALSE); 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_SELECTIVE) 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_start_select_conn(FALSE, NULL); 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project started = TRUE; 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR1("invalid bg connection type : %d ", bg_conn_type); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project started = FALSE; 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (started) 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.bg_conn_type = bg_conn_type; 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return started; 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleUpdateBgConnDev 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to add or remove a device into/from 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** background connection procedure. The background connection 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* procedure is decided by the background connection type, it can be 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* auto connection, or selective connection. 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters add_remove: TRUE to add; FALSE to remove. 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** remote_bda: device address to add/remove. 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN BTM_BleUpdateBgConnDev(BOOLEAN add_remove, BD_ADDR remote_bda) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN ret = TRUE; 3666975b4d711142b885af479721cada448952c6b41Andre Eisenbach UINT8 dev_wl_type = 0; 367946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach BTM_TRACE_EVENT0 (" BTM_BleUpdateBgConnDev"); 368946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach 369946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach /* update white list */ 370946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach ret = btm_update_bg_conn_list(add_remove, remote_bda, &dev_wl_type); 371946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach 372946c681e59451164b343b7ab9415aa73b0d176bcAndre Eisenbach btm_update_dev_to_white_list(add_remove, remote_bda, dev_wl_type); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret; 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleSetConnMode 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set BLE connectable mode for a 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peripheral device. 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters directed: is directed connectable mode, or non-directed. 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dir_bda: connectable direct initiator's LE device address 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattatBTM_STATUS BTM_BleSetConnMode(BOOLEAN is_directed) 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_EVENT1 ("BTM_BleSetConnMode is_directed = %d ", is_directed); 3953aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 3963aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->directed_conn = is_directed; 399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btm_ble_set_connectability( p_cb->connectable_mode); 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_set_conn_mode_adv_init_addr 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description set initator address type and local address type based on adv 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** mode. 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic UINT8 btm_set_conn_mode_adv_init_addr(tBTM_BLE_INQ_CB *p_cb, 413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR_PTR p_addr_ptr, 414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE *p_init_addr_type, 415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE *p_own_addr_type) 416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 evt_type; 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ( p_cb->directed_conn) 420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* direct adv mode does not have privacy if privacy 422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is not enabled or no reconn addr config */ 423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p_own_addr_type = BLE_ADDR_PUBLIC; 424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p_init_addr_type = p_cb->direct_bda.type; 425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(p_addr_ptr, p_cb->direct_bda.bda, BD_ADDR_LEN); 426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta evt_type = BTM_BLE_CONNECT_DIR_EVT; 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else /* undirect adv mode */ 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta evt_type = BTM_BLE_CONNECT_EVT; 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return evt_type; 434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleSetAdvParams 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set advertising parameters. 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters adv_int_min: minimum advertising interval 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** adv_int_max: maximum advertising interval 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dir_bda: connectable direct initiator's LE device address 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** chnl_map: advertising channel map. 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_BleSetAdvParams(UINT16 adv_int_min, UINT16 adv_int_max, 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBLE_BD_ADDR *p_dir_bda, 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_ADV_CHNL_MAP chnl_map) 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR p_addr_ptr = {0}; 459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE init_addr_type = BLE_ADDR_PUBLIC; 460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE own_addr_type = p_addr_cb->own_addr_type; 461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 adv_mode = p_cb->adv_mode; 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("BTM_BleSetAdvParams"); 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4653aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 4663aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 4673aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_BLE_VALID_PRAM(adv_int_min, BTM_BLE_ADV_INT_MIN, BTM_BLE_ADV_INT_MAX) || 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project !BTM_BLE_VALID_PRAM(adv_int_max, BTM_BLE_ADV_INT_MIN, BTM_BLE_ADV_INT_MAX)) 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_ILLEGAL_VALUE; 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_interval_min = adv_int_min; 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_interval_max = adv_int_max; 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_chnl_map = chnl_map; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dir_bda) 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&p_cb->direct_bda, p_dir_bda, sizeof(tBLE_BD_ADDR)); 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_EVENT0 ("update params for an active adv"); 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_stop_adv(); 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->connectable_mode & BTM_BLE_CONNECTABLE) 488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->evt_type = btm_set_conn_mode_adv_init_addr(p_cb, p_addr_ptr, &init_addr_type, &own_addr_type); 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* update adv params */ 491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btsnd_hcic_ble_write_adv_params (p_cb->adv_interval_min, 492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_interval_max, 493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->evt_type, 494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type, 495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta init_addr_type, 496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_addr_ptr, 497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_chnl_map, 498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->afp); 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (adv_mode == BTM_BLE_ADV_ENABLE) 501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_start_adv(); 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleReadAdvParams 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set advertising parameters. 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters adv_int_min: minimum advertising interval 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** adv_int_max: maximum advertising interval 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dir_bda: connectable direct initiator's LE device address 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** chnl_map: advertising channel map. 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_BleReadAdvParams (UINT16 *adv_int_min, UINT16 *adv_int_max, 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP *p_chnl_map) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("BTM_BleReadAdvParams "); 5263aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 5273aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return ; 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *adv_int_min = p_cb->adv_interval_min; 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *adv_int_max = p_cb->adv_interval_max; 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_chnl_map = p_cb->adv_chnl_map; 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dir_bda != NULL) 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_dir_bda, &p_cb->direct_bda, sizeof(tBLE_BD_ADDR)); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleSetScanParams 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set Scan parameters. 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters adv_int_min: minimum advertising interval 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** adv_int_max: maximum advertising interval 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dir_bda: connectable direct initiator's LE device address 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** chnl_map: advertising channel map. 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** scan_type: active scan or passive scan 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_BleSetScanParams(UINT16 scan_interval, UINT16 scan_window, tBTM_BLE_SCAN_MODE scan_mode) 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 (" BTM_BleSetScanParams"); 5593aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 5603aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return ; 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_BLE_VALID_PRAM(scan_interval, BTM_BLE_SCAN_INT_MIN, BTM_BLE_SCAN_INT_MAX) && 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BLE_VALID_PRAM(scan_window, BTM_BLE_SCAN_WIN_MIN, BTM_BLE_SCAN_WIN_MAX) && 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (scan_mode == BTM_BLE_SCAN_MODE_ACTI || scan_mode == BTM_BLE_SCAN_MODE_PASS)) 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scan_type = scan_mode; 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_BLE_CONN_PARAM_UNDEF != scan_interval) 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scan_interval = scan_interval; 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_BLE_CONN_PARAM_UNDEF != scan_window) 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scan_window = scan_window; 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR2("Illegal params: scan_interval = %d scan_window = %d", 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_interval, scan_window); 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleWriteScanRsp 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to write LE scan response. 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: p_scan_rsp: scan response information. 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_BleWriteScanRsp(tBTM_BLE_AD_MASK data_mask, tBTM_BLE_ADV_DATA *p_data) 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_NO_RESOURCES; 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 rsp_data[BTM_BLE_AD_DATA_LEN], 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p = rsp_data; 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 (" BTM_BleWriteScanRsp"); 6003aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 6013aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 6023aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 6033aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(rsp_data, 0, BTM_BLE_AD_DATA_LEN); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_build_adv_data(&data_mask, &p, p_data); 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_scan_rsp_data((UINT8)(p - rsp_data), rsp_data)) 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (data_mask != 0) 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.inq_var.scan_rsp = TRUE; 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.inq_var.scan_rsp = FALSE; 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_ILLEGAL_VALUE; 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_BleWriteAdvData 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to write advertising data. 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: None. 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_BleWriteAdvData(tBTM_BLE_AD_MASK data_mask, tBTM_BLE_ADV_DATA *p_data) 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_LOCAL_ADV_DATA *p_cb_data = &btm_cb.ble_ctr_cb.inq_var.adv_data; 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 mask = data_mask; 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6393aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach BTM_TRACE_EVENT0 ("BTM_BleWriteAdvData "); 6403aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 6413aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 6423aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ILLEGAL_VALUE; 6433aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_cb_data, 0, sizeof(tBTM_BLE_LOCAL_ADV_DATA)); 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = p_cb_data->ad_data; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb_data->data_mask = data_mask; 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb_data->p_flags = btm_ble_build_adv_data(&mask, &p, p_data); 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb_data->p_pad = p; 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_mask != 0) 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("Partial data write into ADV"); 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb_data->data_mask &= ~mask; 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_adv_data((UINT8)(p_cb_data->p_pad - p_cb_data->ad_data), 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb_data->ad_data)) 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_SUCCESS; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NO_RESOURCES; 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_CheckAdvData 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to get ADV data for a specific type. 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_adv - pointer of ADV data 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** type - finding ADV data type 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_length - return the length of ADV data not including type 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer of ADV data 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 *BTM_CheckAdvData( UINT8 *p_adv, UINT8 type, UINT8 *p_length) 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p = p_adv; 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 length; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 adv_type; 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_API1("BTM_CheckAdvData type=0x%02X", type); 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ( length && (p - p_adv <= BTM_BLE_CACHE_ADV_DATA_MAX)) 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(adv_type, p); 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( adv_type == type ) 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* length doesn't include itself */ 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_length = length - 1; /* minus the length of type */ 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p; 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += length - 1; /* skip the length of data */ 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_length = 0; 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_build_adv_data 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called build the adv data and rsp data. 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst, tBTM_BLE_ADV_DATA *p_data) 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 data_mask = *p_data_mask; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p = *p_dst, 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_flag = NULL; 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = BTM_BLE_AD_DATA_LEN, cp_len = 0; 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_PROP_ELEM *p_elem; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 (" btm_ble_build_adv_data"); 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build the adv data structure and build the data string */ 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_mask) 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* flags */ 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_mask & BTM_BLE_AD_BIT_FLAGS) 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 2; 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_FLAG; 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_flag = p; 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data) 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = p_data->flag; 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 0; 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= 3; 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_FLAGS; 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* appearance data */ 743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (len > 3 && data_mask & BTM_BLE_AD_BIT_APPEARANCE) 744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p++ = 3; /* length */ 746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p++ = BTM_BLE_AD_TYPE_APPEARANCE; 747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16_TO_STREAM(p, p_data->appearance); 748ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta len -= 4; 749ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data_mask &= ~BTM_BLE_AD_BIT_APPEARANCE; 751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* device name */ 753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BTM_MAX_LOC_BD_NAME_LEN > 0 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len > 2 && data_mask & BTM_BLE_AD_BIT_DEV_NAME) 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strlen(btm_cb.cfg.bd_name) > (UINT16)(len - 2)) 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = len - 2 + 1; 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_NAME_SHORT; 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM(p, btm_cb.cfg.bd_name, len - 2); 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cp_len = (UINT16)strlen(btm_cb.cfg.bd_name); 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = cp_len + 1; 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_NAME_CMPL; 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM(p, btm_cb.cfg.bd_name, cp_len); 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= (cp_len + 2); 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_DEV_NAME; 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* manufacturer data */ 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len > 2 && data_mask & BTM_BLE_AD_BIT_MANU && 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data && p_data->manu.len != 0 && p_data->manu.p_val) 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->manu.len > (len - 2)) 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cp_len = len - 2; 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cp_len = p_data->manu.len; 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = cp_len + 1; 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_MANU; 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM(p, p_data->manu.p_val, cp_len); 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= (cp_len + 2); 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_MANU; 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TX power */ 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len > 2 && data_mask & BTM_BLE_AD_BIT_TX_PWR) 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 2; 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_TX_PWR; 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = btm_cb.ble_ctr_cb.inq_var.tx_power; 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= 3; 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_TX_PWR; 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* services */ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len > 2 && data_mask & BTM_BLE_AD_BIT_SERVICE && 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data && p_data->services.num_service != 0 && 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->services.p_uuid) 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->services.num_service * 2 > (len - 2)) 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cp_len = (len - 2)/2; 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p ++ = 1 + cp_len * 2; 808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p++ = BTM_BLE_AD_TYPE_16SRV_PART; 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cp_len = p_data->services.num_service; 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 1 + cp_len * 2; 814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *p++ = BTM_BLE_AD_TYPE_16SRV_CMPL; 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < cp_len; i ++) 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM(p, *(p_data->services.p_uuid + i)); 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= (cp_len * 2 + 2); 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_SERVICE; 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len >= 6 && data_mask & BTM_BLE_AD_BIT_INT_RANGE && 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data) 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 5; 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_INT_RANGE; 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM(p, p_data->int_range.low); 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM(p, p_data->int_range.hi); 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= 6; 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_INT_RANGE; 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_mask & BTM_BLE_AD_BIT_PROPRIETARY && p_data && p_data->p_proprietary) 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->p_proprietary->num_elem ; i ++) 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_elem = p_data->p_proprietary->p_elem + i; 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len >= (2 + p_elem->len))/* len byte(1) + ATTR type(1) + Uuid len(2) + value length */ 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p ++ = p_elem->len + 1; /* Uuid len + value length */ 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p ++ = p_elem->adv_type; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM(p, p_elem->p_val, p_elem->len); 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= (2 + p_elem->len); 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_WARNING0("data exceed max adv packet length"); 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_mask &= ~BTM_BLE_AD_BIT_PROPRIETARY; 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_data_mask = data_mask; 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst = p; 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_flag; 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_set_discoverability 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set BLE discoverable mode. 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: mode: discoverability mode. 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS btm_ble_set_discoverability(UINT16 combined_mode) 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 877ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 mode = (combined_mode & BTM_BLE_DISCOVERABLE_MASK); 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 flag = 0; 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 new_mode = BTM_BLE_ADV_ENABLE; 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt_type = (p_cb->connectable_mode == BTM_BLE_NON_CONNECTABLE) ? \ 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((p_cb->scan_rsp) ? BTM_BLE_DISCOVER_EVT : BTM_BLE_NON_CONNECT_EVT )\ 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project : BTM_BLE_CONNECT_EVT; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR p_addr_ptr= {0}; 887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE init_addr_type = BLE_ADDR_PUBLIC, 888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type = p_addr_cb->own_addr_type;; 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT2 ("btm_ble_set_discoverability mode=0x%0x combined_mode=0x%x", mode, combined_mode); 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check mode parameter ***/ 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode > BTM_BLE_MAX_DISCOVERABLE) 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_ILLEGAL_VALUE); 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->br_edr_supported_flag |= (combined_mode & BTM_DISCOVERABLE_MASK); 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->discoverable_mode = mode; 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_cb->br_edr_supported_flag) 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project flag = BTM_BLE_BREDR_NOT_SPT; 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("btm_ble_set_discoverability (BREDR not sup)flag=0x%x",flag); 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1 ("br_edr_supported=0x%x", p_cb->br_edr_supported_flag); 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode == BTM_BLE_LIMITED_DISCOVERABLE || mode == BTM_BLE_GENERAL_DISCOVERABLE) 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("mode == BTM_BLE_LIMITED_DISCOVERABLE "); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* write ADV data with limited disc flag */ 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode == BTM_BLE_LIMITED_DISCOVERABLE) 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project flag |= BTM_BLE_LIMIT_DISC_FLAG ; 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project flag |= BTM_BLE_GEN_DISC_FLAG; 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* non-discoverable */ 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("mode == BTM_BLE_NON_DISCOVERABLE "); 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->connectable_mode == BTM_BLE_NON_CONNECTABLE) 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->br_edr_supported_flag = 0; 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("always disable adv in non-discoverable non-connectable mode if no scan rsp "); 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_cb->scan_rsp ) 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_mode = BTM_BLE_ADV_DISABLE; 927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->evt_type = btm_set_conn_mode_adv_init_addr(p_cb, p_addr_ptr, &init_addr_type, &own_addr_type); 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_update_adv_flag(flag); 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update adv params if start advertising */ 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT2 ("evt_type=0x%x p-cb->evt_type=0x%x ", evt_type, p_cb->evt_type); 938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (new_mode == BTM_BLE_ADV_ENABLE && 939ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (evt_type != p_cb->evt_type ||p_cb->adv_addr_type != own_addr_type)) 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_stop_adv(); 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update adv params */ 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_write_adv_params ((UINT16)(p_cb->adv_interval_min ? p_cb->adv_interval_min : BTM_BLE_GAP_ADV_INT), 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(p_cb->adv_interval_max ? p_cb->adv_interval_max : BTM_BLE_GAP_ADV_INT), 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_type, 947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type, 948ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta init_addr_type, 949ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_addr_ptr, 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_chnl_map, 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->afp)) 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NO_RESOURCES; 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->evt_type = evt_type; 957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_addr_type = own_addr_type; 958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTM_SUCCESS && p_cb->adv_mode != new_mode) 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (new_mode == BTM_BLE_ADV_ENABLE) 965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = btm_ble_start_adv(); 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = btm_ble_stop_adv(); 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up stop advertising timer */ 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTM_SUCCESS && mode == BTM_BLE_LIMITED_DISCOVERABLE) 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT1 ("start timer for limited disc mode duration=%d (30 secs)", BTM_BLE_GAP_LIM_TOUT); 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start Tgap(lim_timeout) */ 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer (&p_cb->inq_timer_ent, BTU_TTYPE_BLE_GAP_LIM_DISC, 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BLE_GAP_LIM_TOUT); 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_set_connectability 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set BLE connectability mode. 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: mode: connectability mode. 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS btm_ble_set_connectability(UINT16 combined_mode) 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 mode = (combined_mode & BTM_BLE_CONNECTABLE_MASK); 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 cur_flag = 0; 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 cur_br_edr_not_sup_flag; 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 new_flag; 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 new_mode = BTM_BLE_ADV_ENABLE; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt_type = (p_cb->scan_rsp) ? BTM_BLE_DISCOVER_EVT: BTM_BLE_NON_CONNECT_EVT; 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR p_addr_ptr = {0}; 1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBLE_ADDR_TYPE init_addr_type = BLE_ADDR_PUBLIC, 1005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type = p_addr_cb->own_addr_type; 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT2 ("btm_ble_set_connectability mode=0x%0x combined_mode=0x%x", mode, combined_mode); 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check mode parameter ***/ 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode > BTM_BLE_MAX_CONNECTABLE) 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_ILLEGAL_VALUE); 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.inq_var.adv_data.p_flags) 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cur_flag = *btm_cb.ble_ctr_cb.inq_var.adv_data.p_flags ; 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cur_br_edr_not_sup_flag = (cur_flag & ((UINT8) BTM_BLE_BREDR_NOT_SPT)); 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->br_edr_supported_flag |= ((combined_mode & BTM_CONNECTABLE_MASK) << 4); 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->br_edr_supported_flag && cur_br_edr_not_sup_flag) 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_flag = cur_flag & ((UINT8) (~BTM_BLE_BREDR_NOT_SPT)); 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT2 ("new flag=0x%x cur flag=0x%x",new_flag, cur_flag); 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_update_adv_flag(new_flag); 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->connectable_mode = mode; 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode == BTM_BLE_NON_CONNECTABLE) 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->discoverable_mode == BTM_BLE_NON_DISCOVERABLE) 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->br_edr_supported_flag = 0; 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("always disable adv in non-discoverable non-connectable mode with no scan rsp"); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!p_cb->scan_rsp) 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_mode = BTM_BLE_ADV_DISABLE; 1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* connectable */ 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta evt_type = btm_set_conn_mode_adv_init_addr(p_cb, p_addr_ptr, &init_addr_type, &own_addr_type); 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update adv params if needed */ 1041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_cb->evt_type != evt_type || p_cb->adv_addr_type != p_addr_cb->own_addr_type) 1042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta && new_mode == BTM_BLE_ADV_ENABLE) 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_stop_adv(); 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_ble_write_adv_params ((UINT16)(p_cb->adv_interval_min ? p_cb->adv_interval_min : BTM_BLE_GAP_ADV_INT), 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(p_cb->adv_interval_max ? p_cb->adv_interval_max : BTM_BLE_GAP_ADV_INT), 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_type, 1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta own_addr_type, 1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta init_addr_type, 1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_addr_ptr, 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_chnl_map, 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->afp)) 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NO_RESOURCES; 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->evt_type = evt_type; 1058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_addr_type = own_addr_type; 1059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update advertising mode */ 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTM_SUCCESS && new_mode != p_cb->adv_mode) 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_adv_enable (new_mode)) 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_mode = new_mode; 1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->adv_mode == BTM_BLE_ADV_ENABLE && 1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->afp != AP_SCAN_CONN_ALL) 1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.wl_state |= BTM_BLE_WL_ADV; 1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_ADV; 1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_start_inquiry 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to start BLE inquiry procedure. 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the duration is zero, the periodic inquiry mode is cancelled. 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: mode - GENERAL or LIMITED inquiry 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_inq_params - pointer to the BLE inquiry parameter. 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_results_cb - callback returning pointer to results (tBTM_INQ_RESULTS) 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cmpl_cb - callback indicating the end of an inquiry 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_CMD_STARTED if successfully started 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate a message buffer 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY - if an inquiry is already active 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS btm_ble_start_inquiry (UINT8 mode, UINT8 duration) 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_NO_RESOURCES; 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_inq = &btm_cb.ble_ctr_cb.inq_var; 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG2("btm_ble_start_inquiry: mode = %02x inq_active = %d", mode, btm_cb.btm_inq_vars.inq_active); 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->proc_mode != BTM_BLE_INQUIRY_NONE) 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("LE scan is active, can not start inquiry"); 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_BUSY); 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_update_scanner_filter_policy(SP_ADV_ALL); 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start scan, already enable duplicate filtering */ 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_ENABLE, BTM_BLE_DUPLICATE_DISABLE)) 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTM_CMD_STARTED; 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->proc_mode = mode; 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (duration != 0) 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start inquiry timer */ 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer (&p_inq->inq_timer_ent, BTU_TTYPE_BLE_INQUIRY, duration); 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_read_remote_name_cmpl 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when BLE remote name is received. 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_read_remote_name_cmpl(BOOLEAN status, BD_ADDR bda, UINT16 length, char *p_name) 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 hci_status = HCI_SUCCESS; 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_NAME bd_name; 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(bd_name, 0, (BD_NAME_LEN + 1)); 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy((UINT8*)bd_name, p_name, length); 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!status) || (length==0)) 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hci_status = HCI_ERR_HOST_TIMEOUT; 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_process_remote_name(bda, bd_name, length +1, hci_status); 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_sec_rmt_name_request_complete (bda, (UINT8 *)p_name, hci_status); 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_read_remote_name 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function read remote LE device name using GATT read 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** procedure. 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: None. 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS btm_ble_read_remote_name(BD_ADDR remote_bda, tBTM_INQ_INFO *p_cur, tBTM_CMPL_CB *p_cb) 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11753aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) 11763aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_ERR_PROCESSING; 11773aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cur && 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->results.ble_evt_type != BTM_BLE_EVT_CONN_ADV && 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->results.ble_evt_type != BTM_BLE_EVT_CONN_DIR_ADV) 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("name request to non-connectable device failed."); 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_ERR_PROCESSING; 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* read remote device name using GATT procedure */ 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->remname_active) 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_BUSY; 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!GAP_BleReadPeerDevName(remote_bda, btm_ble_read_remote_name_cmpl)) 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_BUSY; 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_remname_cmpl_cb = p_cb; 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_active = TRUE; 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_inq->remname_bda, remote_bda, BD_ADDR_LEN); 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer (&p_inq->rmt_name_timer_ent, 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTU_TTYPE_BTM_RMT_NAME, 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_EXT_BLE_RMT_NAME_TIMEOUT); 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_cancel_remote_name 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function cancel read remote LE device name. 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: None. 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_ble_cancel_remote_name(BD_ADDR remote_bda) 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN status; 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GAP_BleCancelReadPeerDevName(remote_bda); 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_active = FALSE; 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_inq->remname_bda, 0, BD_ADDR_LEN); 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_stop_timer(&p_inq->rmt_name_timer_ent); 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_update_adv_flag 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function update the limited discoverable flag in the adv 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** data. 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: None. 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_ble_update_adv_flag(UINT8 flag) 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_LOCAL_ADV_DATA *p_adv_data = &btm_cb.ble_ctr_cb.inq_var.adv_data; 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1 ("btm_ble_update_adv_flag new=0x%x", flag); 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_adv_data->p_flags != NULL) 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1 ("btm_ble_update_adv_flag old=0x%x", *p_adv_data->p_flags); 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_adv_data->p_flags = flag; 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* no FLAGS in ADV data*/ 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (p_adv_data->p_pad == NULL) ? p_adv_data->ad_data : p_adv_data->p_pad; 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* need 3 bytes space to stuff in the flags, if not */ 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* erase all written data, just for flags */ 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((BTM_BLE_AD_DATA_LEN - (p - p_adv_data->ad_data)) < 3) 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = p_adv_data->p_pad = p_adv_data->ad_data; 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_adv_data->ad_data, 0, BTM_BLE_AD_DATA_LEN); 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = 2; 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = BTM_BLE_AD_TYPE_FLAG; 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->p_flags = p; 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = flag; 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->p_pad = p; 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_ble_set_adv_data((UINT8)(p_adv_data->p_pad - p_adv_data->ad_data), 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->ad_data)) 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->data_mask |= BTM_BLE_AD_BIT_FLAGS; 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_parse_adv_data 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function parse the adv data into a structure. 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to entry, or NULL if not found 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_ble_parse_adv_data(tBTM_INQ_INFO *p_info, UINT8 *p_data, 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 len, tBTM_BLE_INQ_DATA *p_adv_data, UINT8 *p_buf) 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_cur = p_data; 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 ad_len, ad_type, ad_flag; 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 (" btm_ble_parse_adv_data"); 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (len > 0) 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("btm_ble_parse_adv_data: len = %d", len); 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((ad_len = *p_cur ++) == 0) 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ad_type = *p_cur ++; 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG2(" ad_type = %02x ad_len = %d", ad_type, ad_len); 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (ad_type) 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_AD_TYPE_NAME_SHORT: 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_AD_TYPE_NAME_CMPL: 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->ad_mask |= BTM_BLE_AD_BIT_DEV_NAME; 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_info) 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_info->remote_name_type =(ad_type == BTM_BLE_AD_TYPE_NAME_SHORT) ? 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BLE_NAME_SHORT: BTM_BLE_NAME_CMPL; 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_info->remote_name, p_cur, ad_len -1); 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_info->remote_name[ad_len] = 0; 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->p_remote_name = p_info->remote_name; 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_info->remote_name_len = p_adv_data->remote_name_len = ad_len - 1; 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("BTM_BLE_AD_TYPE_NAME name = %s",p_adv_data->p_remote_name); 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur += (ad_len -1); 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_AD_TYPE_FLAG: 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->ad_mask |= BTM_BLE_AD_BIT_FLAGS; 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ad_flag = *p_cur ++; 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->flag = (UINT8)(ad_flag & BTM_BLE_ADV_FLAG_MASK) ; 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG3("BTM_BLE_AD_TYPE_FLAG flag = %s | %s | %s", 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_adv_data->flag & BTM_BLE_LIMIT_DISC_FLAG)? "LE_LIMIT_DISC" : "", 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_adv_data->flag & BTM_BLE_GEN_DISC_FLAG)? "LE_GENERAL_DISC" : "", 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_adv_data->flag & BTM_BLE_BREDR_NOT_SPT)? "LE Only device" : ""); 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_AD_TYPE_TX_PWR: 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->ad_mask |= BTM_BLE_AD_BIT_TX_PWR; 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->tx_power_level = (INT8)*p_cur ++; 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("BTM_BLE_AD_TYPE_TX_PWR tx_level = %d", p_adv_data->tx_power_level); 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_MANU: 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_16SRV_PART: 1345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_16SRV_CMPL: 1346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_adv_data->ad_mask |= BTM_BLE_AD_BIT_SERVICE; 1347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* need allocate memory to store UUID list */ 1348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_adv_data->service.num_service = (ad_len - 1)/2; 1349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG1("service UUID list, num = %d", p_adv_data->service.num_service); 1350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cur += (ad_len - 1); 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_SOL_SRV_UUID: 1354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_adv_data->ad_mask |= BTM_BLE_AD_BIT_SERVICE_SOL; 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* need allocate memory to store UUID list */ 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_adv_data->service.num_service = (ad_len - 1)/2; 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG1("service UUID list, num = %d", p_adv_data->service.num_service); 1358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cur += (ad_len - 1); 1359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_128SOL_SRV_UUID: 1362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_adv_data->ad_mask |= BTM_BLE_AD_BIT_SERVICE_128SOL; 1363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* need allocate memory to store UUID list */ 1364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_adv_data->service.num_service = (ad_len - 1)/16; 1365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG1("service UUID list, num = %d", p_adv_data->service.num_service); 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur += (ad_len - 1); 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_APPEARANCE: 1370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_PUBLIC_TARGET: 1371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BLE_AD_TYPE_RANDOM_TARGET: 1372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= (ad_len + 1); 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_cache_adv_data 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update advertising cache data. 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_cache_adv_data(tBTM_INQ_RESULTS *p_cur, UINT8 data_len, UINT8 *p, UINT8 evt_type) 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_le_inq_cb = &btm_cb.ble_ctr_cb.inq_var; 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_cache; 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 length; 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cache adv report/scan response data */ 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_type != BTM_BLE_SCAN_RSP_EVT) 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_le_inq_cb->adv_len = 0; 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_le_inq_cb->adv_data_cache, 0, BTM_BLE_CACHE_ADV_DATA_MAX); 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_len > 0) 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cache = &p_le_inq_cb->adv_data_cache[p_le_inq_cb->adv_len]; 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ( length && ((p_le_inq_cb->adv_len + length + 1) <= BTM_BLE_CACHE_ADV_DATA_MAX)) 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy from the length byte & data into cache */ 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_cache, p-1, length+1); 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* advance the cache pointer past data */ 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cache += length+1; 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* increment cache length */ 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_le_inq_cb->adv_len += length+1; 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* skip the length of data */ 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += length; 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse service UUID from adv packet and save it in inq db eir_uuid */ 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO */ 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_is_discoverable 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description check ADV flag to make sure device is discoverable and match 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the search condition 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_ble_is_discoverable(BD_ADDR bda, UINT8 evt_type, UINT8 *p) 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_discoverable = FALSE; 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_flag, flag = 0; 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 data_len; 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_PARMS *p_cond = &btm_cb.btm_inq_vars.inqparms; 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (data_len, p); 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for observer, always "discoverable */ 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.inq_var.proc_mode == BTM_BLE_OBSERVE || 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (btm_cb.ble_ctr_cb.inq_var.proc_mode == BTM_BLE_SELECT_SCAN && 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_SELECTIVE)) 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* does not match filter condition */ 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cond->filter_cond_type == BTM_FILTER_COND_BD_ADDR && 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcmp(bda, p_cond->filter_cond.bdaddr_cond, BD_ADDR_LEN) != 0) 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("BD ADDR does not meet filter condition"); 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* scan response does not include the flag */ 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_type == BTM_BLE_SCAN_RSP_EVT) 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_len > BTM_BLE_ADV_DATA_LEN_MAX) 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_WARNING1("ADV data too long %d. discard", data_len); 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_len != 0) 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_flag = BTM_CheckAdvData(p, BTM_BLE_AD_TYPE_FLAG, &data_len)) != NULL) 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project flag = * p_flag; 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((btm_cb.ble_ctr_cb.inq_var.proc_mode == BTM_BLE_GENERAL_INQUIRY) && 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (flag & (BTM_BLE_LIMIT_DISC_FLAG|BTM_BLE_GEN_DISC_FLAG)) != 0) 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("Find Generable Discoverable device"); 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_discoverable = TRUE; 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (btm_cb.ble_ctr_cb.inq_var.proc_mode == BTM_BLE_LIMITED_INQUIRY && 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (flag & BTM_BLE_LIMIT_DISC_FLAG) != 0) 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("Find limited discoverable device"); 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_discoverable = TRUE; 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!is_discoverable) 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR1("discoverable flag not desired: %d", flag); 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return is_discoverable; 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_update_inq_result 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update adv packet information into inquiry result. 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_ble_update_inq_result(tINQ_DB_ENT *p_i, UINT8 addr_type, UINT8 evt_type, UINT8 *p) 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN to_report = TRUE; 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_RESULTS *p_cur = &p_i->inq_info.results; 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 len; 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_flag; 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 data_len, rssi; 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_le_inq_cb = &btm_cb.ble_ctr_cb.inq_var; 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p1; 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (data_len, p); 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_len > BTM_BLE_ADV_DATA_LEN_MAX) 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_WARNING1("EIR data too long %d. discard", data_len); 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_cache_adv_data(p_cur, data_len, p, evt_type); 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p1 = (p + data_len); 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (rssi, p1); 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save the info */ 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->inq_result_type = BTM_INQ_RESULT_BLE; 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->ble_addr_type = addr_type; 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->rssi = rssi; 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* active scan, always wait until get scan_rsp to report the result */ 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((btm_cb.ble_ctr_cb.inq_var.scan_type == BTM_BLE_SCAN_MODE_ACTI && 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (evt_type == BTM_BLE_CONNECT_EVT || evt_type == BTM_BLE_DISCOVER_EVT))) 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->scan_rsp = FALSE; 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to_report = FALSE; 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->scan_rsp = TRUE; 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i->inq_count != p_inq->inq_counter) 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type = BT_DEVICE_TYPE_BLE; 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type |= BT_DEVICE_TYPE_BLE; 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_type != BTM_BLE_SCAN_RSP_EVT) 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->ble_evt_type = evt_type; 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->inq_count = p_inq->inq_counter; /* Mark entry for current inquiry */ 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_le_inq_cb->adv_len != 0) 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_flag = BTM_CheckAdvData(p_le_inq_cb->adv_data_cache, BTM_BLE_AD_TYPE_FLAG, &len)) != NULL) 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->flag = * p_flag; 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if BR/EDR not supported is not set, assume is a DUMO device */ 1566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_cur->flag & BTM_BLE_BREDR_NOT_SPT) == 0 && 1567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta evt_type != BTM_BLE_CONNECT_DIR_EVT) 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG0("BR/EDR NOT support bit not set, treat as DUMO"); 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type |= BT_DEVICE_TYPE_DUMO; 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("BR/EDR NOT SUPPORT bit set, LE only device"); 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return to_report; 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_send_sel_conn_callback 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send selection connection request callback. 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_send_sel_conn_callback(BD_ADDR remote_bda, UINT8 evt_type, UINT8 *p_data, UINT8 addr_type) 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 data_len, len; 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_dev_name, remname[31] = {0}; 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.p_select_cback == NULL || 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* non-connectable device */ 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (evt_type != BTM_BLE_EVT_CONN_ADV && evt_type != BTM_BLE_EVT_CONN_DIR_ADV)) 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (data_len, p_data); 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get the device name if exist in ADV data */ 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (data_len != 0) 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev_name = BTM_CheckAdvData(p_data, BTM_BLE_AD_TYPE_NAME_CMPL, &len); 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev_name == NULL) 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev_name = BTM_CheckAdvData(p_data, BTM_BLE_AD_TYPE_NAME_SHORT, &len); 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev_name) 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(remname, p_dev_name, len); 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allow connection */ 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((* btm_cb.ble_ctr_cb.p_select_cback)(remote_bda, remname)) 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* terminate selective connection, initiate connection */ 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_initiate_select_conn(remote_bda); 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_process_adv_pkt 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when adv packet report events are 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** received from the device. It updates the inquiry database. 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the inquiry database is full, the oldest entry is discarded. 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_process_adv_pkt (UINT8 *p_data) 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR bda; 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt_type = 0, *p = p_data; 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 addr_type = 0; 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* always get one device at a time */ 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p ++; 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Extract inquiry results */ 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (evt_type, p); 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (addr_type, p); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_BDADDR (bda, p); 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#ifdef BTM_BLE_PC_ADV_TEST_MODE /* For general stack code (e.g. BTInsight testing), we simply do not define it to exclude or set it to TRUE to include */ 1651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (BTM_BLE_PC_ADV_TEST_MODE) /* For stack component, it is always defined and maps to a global variable g_bDraculaAdvertisingMode */ 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.p_scan_req_cback) 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*btm_cb.ble_ctr_cb.p_scan_req_cback)(bda, addr_type, evt_type); 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only process the results if the inquiry is still active */ 1661ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((btm_cb.btm_inq_vars.inq_active & BTM_LE_SCAN_ACTIVE_MASK) == 0 && 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (btm_cb.ble_ctr_cb.bg_conn_type != BTM_BLE_CONN_SELECTIVE || 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* or selective auto connection is active */ 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.p_select_cback == NULL)) 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1667ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_process_adv_pkt_cont(bda, addr_type, evt_type, p); 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_process_adv_pkt_cont 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called after random address resolution is 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** done, and proceed to process adv packet. 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt_type, UINT8 *p) 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_i; 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN to_report = FALSE; 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_RESULTS_CB *p_inq_results_cb = p_inq->p_inq_results_cb; 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_le_inq_cb = &btm_cb.ble_ctr_cb.inq_var; 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i = btm_inq_db_find (bda); 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if this address has already been processed for this inquiry */ 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_inq_find_bdaddr(bda)) 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* never been report as an LE device */ 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_i && 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (!(p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BLE) || 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* scan repsonse to be updated */ 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (!p_i->scan_rsp))) 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.ble_ctr_cb.inq_var.proc_mode == BTM_BLE_OBSERVE) 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG0("update new BLE information "); 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to_report = TRUE; 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if yes, skip it */ 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; /* assumption: one result per event */ 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* not been processed int his round */ 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to_report = TRUE; 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If existing entry, use that, else get a new one (possibly reusing the oldest) */ 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i == NULL) 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_ble_is_discoverable(bda, evt_type, p)) 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_i = btm_inq_db_new (bda)) != NULL) 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp++; 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to_report = TRUE; 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_ERROR0("discard adv pkt"); 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_i->inq_count != p_inq->inq_counter) /* first time seen in this inquiry */ 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp++; 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update the LE device information in inquiry database */ 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (to_report) 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to_report = btm_ble_update_inq_result(p_i, addr_type, evt_type, p); 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_USE_INQ_RESULTS_FILTER == TRUE 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the number of responses found and limited, issue a cancel inquiry */ 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inqparms.max_resps && 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp == p_inq->inqparms.max_resps) 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* new device */ 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i == NULL || 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (/* assume a DUMO device, BR/EDR inquiry is always active */ 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i && p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BLE && p_i->scan_rsp)) 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_WARNING0("INQ RES: Extra Response Received...cancelling inquiry.."); 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if is non-periodic inquiry active, cancel now */ 1760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_inq->inq_active & BTM_BR_INQ_ACTIVE_MASK) != 0 && 1761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) == 0) 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_inq_cancel(); 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stop LE scan now */ 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_stop_scan(); 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* background connection in selective connection mode */ 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_SELECTIVE) 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BLE && 1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (evt_type == BTM_BLE_CONNECT_EVT || evt_type == BTM_BLE_CONNECT_DIR_EVT)) 1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_send_sel_conn_callback(bda, evt_type, p, addr_type); 1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG0("None LE device, can not initiate selective connection"); 1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_inq_results_cb && to_report) 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (p_inq_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_stop_scan 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop the BLE scan. 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_stop_scan(void) 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_stop_scan "); 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_stop_timer (&p_cb->inq_timer_ent); 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Clear the inquiry callback if set */ 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scan_type = BTM_BLE_SCAN_MODE_NONE; 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->proc_mode = BTM_BLE_INQUIRY_NONE; 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stop discovery now */ 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If we have a callback registered for inquiry complete, call it */ 18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_DEBUG2 ("BTM Inq Compl Callback: status 0x%02x, num results %d", 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.status, p_inq->inq_cmpl_info.num_resp); 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_update_scanner_filter_policy(SP_ADV_ALL); 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete(HCI_SUCCESS, (UINT8)(p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK)); 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_start_adv 1829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1830ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Stop the BLE advertising. 1831ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1832ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 1833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1834ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1835ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic tBTM_STATUS btm_ble_start_adv(void) 1836ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1837ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 1838ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_STATUS rt = BTM_NO_RESOURCES; 1839ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1840ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btsnd_hcic_ble_set_adv_enable (BTM_BLE_ADV_ENABLE)) 1841ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1842ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->afp != AP_SCAN_CONN_ALL) 1843ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.wl_state |= BTM_BLE_WL_ADV; 1844ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_mode = BTM_BLE_ADV_ENABLE; 1846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rt = BTM_SUCCESS; 1848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1850ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_mode = BTM_BLE_ADV_DISABLE; 1852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_ADV; 1853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return rt; 1855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_stop_adv 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop the BLE advertising. 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1865ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic tBTM_STATUS btm_ble_stop_adv(void) 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1867ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 1868ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_STATUS rt = BTM_SUCCESS; 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1870ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->adv_mode == BTM_BLE_ADV_ENABLE) 18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1872ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btsnd_hcic_ble_set_adv_enable (BTM_BLE_ADV_DISABLE)) 1873ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1874ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->adv_mode = BTM_BLE_ADV_DISABLE; 1875ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_ADV; 1876ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1877ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1878ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rt = BTM_NO_RESOURCES; 18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1880ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return rt; 1881ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_timeout 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Called when BTM BLE inquiry timer expires 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_timeout(TIMER_LIST_ENT *p_tle) 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_tle->event) 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_INQUIRY: 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_stop_scan(); 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_GAP_LIM_DISC: 19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* lim_timeout expiried, limited discovery should exit now */ 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_update_adv_flag(BTM_BLE_NON_LIMIT_DISC_FLAG); 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_stop_adv(); 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_RANDOM_ADDR: 1909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM) 19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* refresh the random addr */ 19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_gen_resolvable_private_addr(); 19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_read_remote_features_complete 19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when the command complete message 19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is received from the HCI for the read LE remote feature supported 19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** complete event. 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_read_remote_features_complete(UINT8 *p) 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tACL_CONN *p_acl_cb = &btm_cb.acl_db[0]; 19343aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach UINT8 status; 19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle; 19363aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach int xx; 19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_read_remote_features_complete "); 19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19403aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach STREAM_TO_UINT8 (status, p); 19413aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach STREAM_TO_UINT16 (handle, p); 19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Look up the connection by handle and copy features */ 19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_acl_cb++) 19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_acl_cb->in_use) && (p_acl_cb->hci_handle == handle)) 19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19483aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach STREAM_TO_ARRAY(p_acl_cb->peer_le_features, p, BD_FEATURES_LEN); 19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_write_adv_enable_complete 19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function process the write adv enable command complete. 19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_write_adv_enable_complete(UINT8 * p) 19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; 19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if write adv enable/disbale not succeed */ 19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (*p != HCI_SUCCESS) 19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* toggle back the adv mode */ 19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->adv_mode = !p_cb->adv_mode; 19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1975ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1976ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1977ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1978ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_dir_adv_tout 1980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description when directed adv time out 1982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 1984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_dir_adv_tout(void) 1987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.inq_var.adv_mode = BTM_BLE_ADV_DISABLE; 1989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* make device fall back into undirected adv mode by default */ 1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cb.ble_ctr_cb.inq_var.directed_conn = FALSE; 1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btm_ble_update_mode_operation 1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function update the GAP role operation when a link status 1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** is updated. 2000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 2001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 2002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 2003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 2004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, BOOLEAN conn_cancel) 2005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tACL_CONN *pa = &btm_cb.acl_db[0]; 2007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16 xx; 2008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 dev_role = link_role; 2009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_TRACE_DEBUG1("btm_ble_update_mode_operation adv_mode = %d", btm_cb.ble_ctr_cb.inq_var.adv_mode ); 2011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* update periphera role operation */ 2013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If we are LE connectable, check if we need to start advertising again */ 2014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (link_role == HCI_ROLE_UNKNOWN) 2015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* && btm_cb.ble_ctr_cb.inq_var.connectable_mode != BTM_BLE_NON_CONNECTABLE) */ 2016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, pa++) 2018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If any other LE link is up, we are still not connectable */ 2020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (pa->in_use && pa->is_le_link) 2021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta dev_role = pa->link_role; 2023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 2024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btm_cb.ble_ctr_cb.inq_var.connectable_mode == BTM_BLE_CONNECTABLE && 2029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (dev_role == HCI_ROLE_UNKNOWN )) /* when device has no connection, update adv here */ 2030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if already in connection, no connectable adv is allowed unless scatternet is enabled */ 2031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_set_connectability ( btm_cb.ble_ctr_cb.inq_var.connectable_mode ); 2033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btm_ble_get_conn_st() == BLE_CONN_IDLE) 2036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!btm_send_pending_direct_conn()) 2038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 2039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_ble_resume_bg_conn(); 2040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_ble_init 20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Initialize the control block variable values. 20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_ble_init (void) 20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; 20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_TRACE_EVENT0 ("btm_ble_init "); 20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_cb, 0, sizeof(tBTM_BLE_CB)); 20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.adv_mode = BTM_BLE_ADV_DISABLE; 20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.scan_type = BTM_BLE_SCAN_MODE_NONE; 20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.adv_chnl_map = BTM_BLE_DEFAULT_ADV_CHNL_MAP; 20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.afp = BTM_BLE_DEFAULT_AFP; 20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.sfp = BTM_BLE_DEFAULT_SFP; 20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.connectable_mode = BTM_BLE_NON_CONNECTABLE; 20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->inq_var.discoverable_mode = BTM_BLE_NON_DISCOVERABLE; 20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for background connection, reset connection params to be undefined */ 20705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scan_int = p_cb->scan_win = BTM_BLE_CONN_PARAM_UNDEF; 20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20726975b4d711142b885af479721cada448952c6b41Andre Eisenbach p_cb->inq_var.evt_type = BTM_BLE_NON_CONNECT_EVT; 20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BLE_INCLUDED */ 2076